如何在ASP .NET MVC 5中为AspNetUser创建SecurityStamp

Yod*_*oda 21 c# asp.net-mvc entity-framework seed asp.net-identity

当我通过Register操作创建用户时,应用程序用户运行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 = "informatyka4444@wp.pl", UserName = "informatyka4444@wp.pl"},
                        new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "informatyka4445@wp.pl", UserName = "informatyka4445@wp.pl"}
                        };

                    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);
                        }
                    }

                }
            }
Run Code Online (Sandbox Code Playgroud)

用户没有获得安全标记:

在此输入图像描述

然后当我想登录时,我得到:

在此输入图像描述

问题:如何SecurityStamp为用户生成?

Hor*_*Net 36

安全标记可以是您想要的任何内容.它经常被误认为是时间戳,但事实并非如此.如果用户实体上发生了某些变化,它将被ASP.NET标识覆盖.如果您直接处理上下文,最好的方法是生成一个新的Guid并将其用作图章.这是一个简单的例子:

var users = new List<ApplicationUser> 
                { 
                    new ApplicationUser
                        {
                            PasswordHash = hasher.HashPassword("TestPass44!"), 
                            Email = "informatyka4444@wp.pl", 
                            UserName = "informatyka4444@wp.pl", 
                            SecurityStamp = Guid.NewGuid().ToString()
                        },
                    new ApplicationUser
                        {
                            PasswordHash = hasher.HashPassword("TestPass44!"),
                            Email = "informatyka4445@wp.pl", 
                            UserName = "informatyka4445@wp.pl", 
                            SecurityStamp = Guid.NewGuid().ToString()
                         }
                };
Run Code Online (Sandbox Code Playgroud)

  • 它有效你知道为什么没有这个 SequirtyStamp 集我就无法登录吗? (2认同)
  • 安全标记用于使用户登录 cookie 无效并强制他们重新登录。http://stackoverflow.com/a/19505060/749626 (2认同)
  • 如果它为null,则密码重置可能不起作用 - "无效令牌".错误 (2认同)