2015-12-30 118 views
1

我使用UserManager.CheckPassword(...)自定義IUser實現時遇到問題。自定義IUser實現 - 驗證密碼

我正在使用.net與Owin的身份,創建了我自己的IUserIUserStore的實現。

對於商店,我只使用可選的電子郵件和密碼存儲。

IUser實現是在這裏看到,與基本字段:驗證用戶時,在登錄時出現

public class RegisteredUser : IUser<string> 
{ 
    public RegisteredUser() 
    { 
     Id = Guid.NewGuid().ToString(); 
    } 

    public string Id { get; } 

    public string UserName { get; set; } 

    public string PasswordHash { get; set; } 

    public string Email { get; set; } 

    public bool EmailConfirmed { get; set; } 
} 

問題 我無法使用SignInManager.PasswordSignIn(...)爲我的商店犯規實施LockoutStore。

相反,我用UserManager.CheckPassword(...),但這將引發出現FormatException,說:

輸入不是一個有效的Base-64串...

UserSignInManager manager = HttpContext.GetOwinContext().Get<UserSignInManager>(); 

RegisteredUser user = manager.UserManager.FindByEmail(model.Email); 
if (user != null && manager.UserManager.CheckPassword(user, model.Password)) 
{ 
    manager.SignIn(user, model.RememberMe, model.RememberMe); 
    return RedirectToAction("UserProfile"); 
} 

想着這個,我也不明白CheckPassword()方法能夠檢查我的自定義實現的密碼而不知道在哪裏查找。

我在做什麼錯?

+0

您可以在UserManager上發佈更多數據嗎? CheckPassword方法? –

+0

這不是我自己的實現。我使用microsofts默認值,但用我自己的自定義UserStore實例化它。 –

回答

1

好吧 - Brainfart代表我..

UserManager能夠爲我的UserStore檢查密碼實現以下的方法

public Task<string> GetPasswordHashAsync(RegisteredUser user) 
{ 
    string passwordHash = AWSUser.GetPasswordHash(user.Id); 
    return Task.FromResult(passwordHash); 

} 

的問題是在AWSUser類,它具有以下方法

public static string GetPasswordHash(string id) 
{ 
    return tblUsers.Find(u => u.Id.Equals(id)).Id; 
} 

因爲我錯誤地返回ID,那當然失敗..