2014-04-10 60 views
6

我正在使用asp.net身份登錄和身份驗證。 我收到錯誤密碼字段時登錄用以下方法輸入不是有效的Base-64字符串,因爲它包含非基本64位字符的ASP.NET身份

模型=是用戶實體

var user = await UserManager.FindAsync(model.UserName, model.Password); 
       if (user != null) 
       { 
        bool isPersistent = false; 
        await SignInAsync(user, isPersistent); 
        return RedirectToLocal(returnUrl); 
       } 

輸入不是有效的Base-64字符串,因爲它含有非基本64字符,更比兩個填充字符或填充字符中的非法字符

+0

我也收到了這個問題。我不認爲你在使用MySQL?你有沒有設法解決這個問題的底部? – Luke

+0

我也有這個問題,我使用EF。但是我沒有將Pk從字符串覆蓋到Int – Zapnologica

+2

如果將無效散列放在Password_Hash中,您將得到相同的錯誤 – user960567

回答

0

您使用的是EF嗎?如果是這樣,你不應該在你的edmx上添加AspNetRoles,AspNetUserClaims,AspNetUserLogins和AspNetUserRoles。

另外,我總是使用下面的「登錄」方法。如果我需要保留一些信息(比如userRole,userName等),我使用下面的Session。

public async Task<ActionResult> Login(LoginViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     // This doesn't count login failures towards account lockout 
     // To enable password failures to trigger account lockout, change to shouldLockout: true 
     var user = await UserManager.FindAsync(model.Email, model.Password); 
     //var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
     if (user != null) 
     { 
      string userRole = UserManager.GetRoles(user.Id).FirstOrDefault(); 
      Session["userRole"] = userRole; 
      Session["userName"] = model.Email; 
      await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      ModelState.AddModelError("", "Invalid username or password"); 
      return View(model); 
     } 
    } 

因此,你可以嘗試

await SignInManager.PasswordSignInAsync 

await SignInManager.SignInAsync 
相關問題