質問編集履歴
3
原因究明により、タイトルの見直しとまとめの追加
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ASP.NET
|
1
|
+
ASP.NETの認証機能のAspNetUsersテーブルに自動採番(identity)のカラムを追加すると更新時にエラーになる
|
test
CHANGED
@@ -185,3 +185,15 @@
|
|
185
185
|
Visual Studio 2019
|
186
186
|
|
187
187
|
ASP.NET CORE 5
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
### うまくいかなかった原因
|
192
|
+
|
193
|
+
回答者の協力により、下記の事が分りました。
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
AspNetUsersの更新は、変更箇所以外のカラムもすべて更新対象としており、auto incrementのカラムはエラーになる事がわかりました。
|
198
|
+
|
199
|
+
コーディングの量に対して効果が低いので、auto incrementのカラムは諦めました。
|
2
Email Confirmの実装を追記しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -80,6 +80,12 @@
|
|
80
80
|
|
81
81
|
・ユーザを登録し、「Click here to confirm your account」をクリックするとエラーになります。
|
82
82
|
|
83
|
+
Email Confirmは、下記の「エラーが発生する該当のソースコード」に載せてあります。
|
84
|
+
|
85
|
+
新規スキャフォールディングでオーバーライドしてから何も変更していません。
|
86
|
+
|
87
|
+
(userIdという変数がありますが、元々あり今回のUserIdとは正しく区別されてるようです)
|
88
|
+
|
83
89
|
※データは実際に登録されています。
|
84
90
|
|
85
91
|
※UserIdはauto increment指定なので、設定不要という認識で一切値を設定していません。
|
@@ -98,21 +104,75 @@
|
|
98
104
|
|
99
105
|
```C#
|
100
106
|
|
101
|
-
p
|
107
|
+
namespace App01Find.Areas.Identity.Pages.Account
|
102
108
|
|
103
109
|
{
|
104
110
|
|
105
|
-
|
111
|
+
[AllowAnonymous]
|
106
112
|
|
107
|
-
c
|
113
|
+
public class ConfirmEmailModel : PageModel
|
108
114
|
|
109
|
-
|
115
|
+
{
|
110
116
|
|
111
|
-
|
117
|
+
private readonly UserManager<App01FindUser> _userManager;
|
112
118
|
|
113
|
-
confirming your email.";
|
114
119
|
|
120
|
+
|
121
|
+
public ConfirmEmailModel(UserManager<App01FindUser> userManager)
|
122
|
+
|
123
|
+
{
|
124
|
+
|
125
|
+
_userManager = userManager;
|
126
|
+
|
127
|
+
}
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
[TempData]
|
132
|
+
|
133
|
+
public string StatusMessage { get; set; }
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
public async Task<IActionResult> OnGetAsync(string userId, string code)
|
138
|
+
|
139
|
+
{
|
140
|
+
|
141
|
+
if (userId == null || code == null)
|
142
|
+
|
143
|
+
{
|
144
|
+
|
145
|
+
return RedirectToPage("/Index");
|
146
|
+
|
147
|
+
}
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
var user = await _userManager.FindByIdAsync(userId);
|
152
|
+
|
153
|
+
if (user == null)
|
154
|
+
|
155
|
+
{
|
156
|
+
|
157
|
+
return NotFound($"Unable to load user with ID '{userId}'.");
|
158
|
+
|
159
|
+
}
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
|
164
|
+
|
165
|
+
var result = await _userManager.ConfirmEmailAsync(user, code); //←ここでエラー
|
166
|
+
|
167
|
+
StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email.";
|
168
|
+
|
115
|
-
return Page();
|
169
|
+
return Page();
|
170
|
+
|
171
|
+
}
|
172
|
+
|
173
|
+
}
|
174
|
+
|
175
|
+
}
|
116
176
|
|
117
177
|
```
|
118
178
|
|
1
実際に行った過程を詳しく書きました
test
CHANGED
File without changes
|
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
対処・対応の方法として
|
29
|
+
対処・対応の方法として、次の4パターンを考えました。
|
30
30
|
|
31
31
|
1.店舗レコードへ書くUser識別を諦めてGUIDにしておく(できれば避けたい)
|
32
32
|
|
@@ -50,7 +50,13 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
###
|
53
|
+
### やった事
|
54
|
+
|
55
|
+
・ASP.MET COREでWEBアプリケーションを作成(認証は無しで作成)。
|
56
|
+
|
57
|
+
・新規スキャフォールディングでIDを指定し認証を有効にする(すべてのファイルをオーバーライド)。
|
58
|
+
|
59
|
+
・認証のユーザクラスIdentityUserに対して継承を行い、App01FindUserを作成しUserIdを追加。この項目をDatabaseGeneratedOption.Identityでauto incrementに指定↓
|
54
60
|
|
55
61
|
```C#
|
56
62
|
|
@@ -66,25 +72,37 @@
|
|
66
72
|
|
67
73
|
```
|
68
74
|
|
75
|
+
・マイグレーションとアップデートを行い、テーブルを作成。
|
76
|
+
|
77
|
+
![イメージ説明](2af1cbbdf774c0167c62362bd2d63f80.png)
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
・ユーザを登録し、「Click here to confirm your account」をクリックするとエラーになります。
|
82
|
+
|
83
|
+
※データは実際に登録されています。
|
84
|
+
|
85
|
+
※UserIdはauto increment指定なので、設定不要という認識で一切値を設定していません。
|
86
|
+
|
69
87
|
|
70
88
|
|
71
89
|
### 発生している問題・エラーメッセージ
|
72
90
|
|
73
|
-
|
74
|
-
|
75
|
-
```
|
76
|
-
|
77
|
-
|
91
|
+
![イメージ説明](31c616506c15483cf9847ea087d2897f.png)
|
78
|
-
|
79
|
-
```
|
80
92
|
|
81
93
|
|
82
94
|
|
83
|
-
### 該当のソースコード
|
95
|
+
### エラーが発生する該当のソースコード
|
84
96
|
|
85
|
-
|
97
|
+
ConfirmEmail.cshtml.cs
|
86
98
|
|
87
99
|
```C#
|
100
|
+
|
101
|
+
public async Task<IActionResult> OnGetAsync(string userId, string code)
|
102
|
+
|
103
|
+
{
|
104
|
+
|
105
|
+
//一部省略
|
88
106
|
|
89
107
|
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
|
90
108
|
|