web-dev-qa-db-ja.com

ASP .NET MVC 5でAspNetUserのSecurityStampを作成する方法

アプリケーションの実行中に登録アクションでユーザーを作成すると、アプリケーションユーザーが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);
                        }
                    }

                }
            }

ユーザーはセキュリティスタンプを取得できません:

enter image description here

そして、私がログインしたいとき、私は得ます:

enter image description here

質問:ユーザーのSecurityStampを生成する方法は?

21
Yoda

セキュリティスタンプは何でもかまいません。タイムスタンプと誤解されることがよくありますが、そうではありません。ユーザーエンティティで何かが変更されると、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()
                         }
                };
37
Horizon_Net