我想在ASP.Identity用户和成员资格表中插入超过1,000个用户名和密码。理想情况下,我想在插入密码时对其进行加密。这可以用T-SQL完成,还是我必须在C#中使用一些代码来循环一个例程来加密密码并插入用户名和可能的其他信息?一个例子将不胜感激。
答案 0 :(得分:4)
好的,所以我找到了一种在不影响性能的情况下批量插入AspNet身份表的方法。
public void CreateBulkIdentityUsers(List<string> userNames)
{
using (ApplicationDbContext context = new ApplicationDbContext())
{
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var users = context.Users.Where(u => userNames.Contains(u.UserName)).ToList();
PasswordHasher passwordHasher = new PasswordHasher();
foreach (var userName in userNames)
{
var user = users.Where(u => u.UserName == userName).FirstOrDefault();
if (user == null)
{
user = new ApplicationUser()
{
UserName = userName,
EmailConfirmed = false,
PhoneNumberConfirmed = false,
TwoFactorEnabled = false,
LockoutEnabled = false,
PasswordHash = passwordHasher.HashPassword("Password@123"),
SecurityStamp = Guid.NewGuid().ToString().ToLower()
};
context.Users.Add(user);
}
}
context.SaveChanges();
}
}
在循环之前获取所有用户。这样我们就可以检查该用户是否已经存在于数据库中。
初始化PasswordHasher以哈希密码。
希望,这对某人有帮助。 :)
答案 1 :(得分:1)
我认为您需要在C#中执行此操作。试试这个......
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
foreach (var user in users)
{
var appUser = new ApplicationUser
{
UserName = user.UserName // assign other properties here
};
await userManager.CreateAsync(appUser, user.Password);
}