アプリケーションの実行中に登録アクションでユーザーを作成すると、アプリケーションユーザーがSecurityStampを取得します。ユーザーを追加するとき:
if (!context.Users.Any()) {
System.Diagnostics.Debug.WriteLine("INSIDE");
var hasher = new PasswordHasher();
try {
var users = new List<ApplicationUser> {
new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]"},
new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]"}
};
users.ForEach(user => context.Users.AddOrUpdate(user));
context.SaveChanges();
} catch (DbEntityValidationException e) {
System.Diagnostics.Debug.WriteLine("EXC: ");
foreach (DbEntityValidationResult result in e.EntityValidationErrors) {
foreach (DbValidationError error in result.ValidationErrors) {
System.Diagnostics.Debug.WriteLine(error.ErrorMessage);
}
}
}
}
ユーザーはセキュリティスタンプを取得できません:
そして、私がログインしたいとき、私は得ます:
質問:ユーザーのSecurityStamp
を生成する方法は?
セキュリティスタンプは何でもかまいません。タイムスタンプと誤解されることがよくありますが、そうではありません。ユーザーエンティティで何かが変更されると、ASP.NET Identityによってオーバーライドされます。コンテキストに直接取り組んでいる場合は、新しいGuidを生成してスタンプとして使用するのが最善の方法です。以下に簡単な例を示します。
var users = new List<ApplicationUser>
{
new ApplicationUser
{
PasswordHash = hasher.HashPassword("TestPass44!"),
Email = "[email protected]",
UserName = "[email protected]",
SecurityStamp = Guid.NewGuid().ToString()
},
new ApplicationUser
{
PasswordHash = hasher.HashPassword("TestPass44!"),
Email = "[email protected]",
UserName = "[email protected]",
SecurityStamp = Guid.NewGuid().ToString()
}
};