web-dev-qa-db-fra.com

Comment créer SecurityStamp pour AspNetUser dans ASP .NET MVC 5

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é:

enter image description here

puis quand je veux me connecter, j'obtiens:

enter image description here

Question: Comment générer SecurityStamp pour l'utilisateur?

21
Yoda

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()
                         }
                };
37
Horizon_Net