2015-12-30 63 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,那当然失败..