我使用ASP .NET MVC内置模板进行身份验证。对于某些自定义角色,我将新注册用户代码复制到另一个页面上,并按照以下方式存储在数据库中。
public void adduser(AdduserModel role){
ApplicationUser appUser = new ApplicationUser() { Email = role.Email, PasswordHash = role.Password, UserName = role.Email, EmailConfirmed = true };
var manager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var response = manager.Create(appUser);
}
在模板中,AccountController如下所示
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var user = await UserManager.FindByNameAsync(model.Email);
// Session["UserName"] = model.Email;
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
}
密码和电子邮件等都存储在密码中,但myCode以纯文本格式存储,模板代码以加密格式存储密码。
当我尝试登录时,模板注册用户正常运行并登录,但我的代码给了我以下错误。
输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非空白字符。
我该如何解决这个问题?
答案 0 :(得分:0)
我不确定代码的哪个区域是自定义的,以及您使用的是哪个版本的模板/ asp.net标识,但如果您使用的是标准UserManager,请尝试:
ApplicationUser appUser = new ApplicationUser() { Email = role.Email, UserName = role.Email, EmailConfirmed = true };
var manager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var response = manager.Create(appUser, role.password);
因为UserManager应该为您处理加密。
在调用 manager.Create 时只需传递纯文本密码,并且不要将其包含在第一行(ApplicationUser)创建中。