2017-01-21 25 views
0

我使用內置模板進行身份驗證的ASP .NET MVC。對於某些自定義角色,我將新註冊用戶代碼複製到另一頁上,並按以下方式存儲在數據庫中。錯誤:輸入包含非基本64字符,超過兩個填充字符

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的是採用明文存儲和模板代碼存儲在加密格式通。

當我嘗試登錄時,模板註冊用戶正常執行並登錄,但我的代碼給我下面的錯誤。

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters.

我該如何解決這個問題?

+0

您是否嘗試設置已認證用戶的角色,然後使用類似[Authorize(Roles =「Admin」)]來裝飾該操作? – LKC

+0

是的,我嘗試過,但不能。可能有些事情是錯的。你能簡單地解釋一下嗎? –

+0

如果您不想使用內置身份驗證和授權的asp.net模板,那麼您可以關注自定義角色和身份驗證的文章很少。http://www.dotnettricks.com/learn/mvc/custom-authentication -and-authorization-in-aspnet-mvc https://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF – LKC

回答

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)創建中。

相關問題