错误:输入包含非基本64个字符,两个以上的填充字符

时间:2017-01-21 17:15:14

标签: asp.net-mvc asp.net-mvc-5 base64 asp.net-authentication

我使用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个字符,两个以上的填充字符或填充字符中的非空白字符。

我该如何解决这个问题?

1 个答案:

答案 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)创建中。