在asp.net身份2.2.1中使用密码哈希创建测试用户

gra*_*bag 2 c# asp.net asp.net-mvc asp.net-identity-2

我想为我的 ASP.net MVC 应用程序创建一些测试用户。身份版本为2.2.1

我的代码很好地生成用户,但我想分配允许这些测试帐户登录的密码。所以我相信我需要调用以正常方式创建用户时使用的相同散列函数。

我的代码是

ApplicationDbContext db = new ApplicationDbContext();
...

for (var i=0; i<100; i++)
{
    var name = "User" + i;
    var user = db.Users.FirstOrDefault(u => u.UserName == name);

    if (user == null)
    {
        user = new ApplicationUser() {
                        UserName = name,
                        Email = name + "@" + name + "." + name,
                        PasswordHash = ?????hash of name ?????
                    };
         db.Users.Add(user);
         db.SaveChanges();

    }
}
Run Code Online (Sandbox Code Playgroud)

是的,我正在尝试为 User1 输入 User1 的密码,为 User2 输入 User2 的密码,依此类推。

问候, 约翰

Nko*_*osi 5

UserManager会创建帐户。假设您使用的是默认的 Identity 框架模板,应该有一个ApplicationUserManager派生自UserManager<ApplicationUser>所有必要的配置应该已经在该类中。

public async Task CreateTestUsers() {

    var db = new ApplicationDbContext();
    var userStore = new UserStore<ApplicationUser>(db);
    var userManager = new ApplicationUserManager(userStore);

    for (var i = 1; i <= 100; i++) {
        var username = "User" + i;

        var user = db.Users.FirstOrDefault(u => u.UserName == username);
        if (user == null) {
            user = new ApplicationUser() {
                            UserName = username,
                            Email = username + "@" + username + "." + username,
                            EmailConfirmed = true,
                            LockoutEnabled = false
                        };

            var password = username;
            var result = await userManager.CreateAsync(user, password);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后应该像正常方式一样创建测试用户,密码全部散列并准备好进行测试。