Lorsque je crée un utilisateur en enregistrant l'action lorsque l'application est en cours d'exécution, l'utilisateur de l'application obtient SecurityStamp. Lorsque j'ajoute un utilisateur par:
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);
}
}
}
}
l'utilisateur n'obtient pas de tampon de sécurité:
puis quand je veux me connecter, j'obtiens:
Question: Comment générer SecurityStamp
pour l'utilisateur?
Le tampon de sécurité peut être tout ce que vous voulez. Il est souvent confondu avec un horodatage, mais ce n'est pas le cas. Il sera remplacé par l'identité ASP.NET si quelque chose change sur l'entité utilisateur. Si vous travaillez directement sur le contexte, la meilleure façon serait de générer un nouveau Guid et de l'utiliser comme tampon. Voici un exemple simple:
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()
}
};