自定义 IUser 实现 - 验证密码

Custom IUser implementation - Validate password

我在使用 UserManager.CheckPassword(...) 和自定义 IUser 实现时遇到问题。

我在 Owin 中使用 .net Identity,创建我自己的 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,说:

The input is not a valid Base-64 string...

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() 方法如何能够在不知道在哪里查看的情况下检查我的自定义实现的密码。

我做错了什么?

好的 - 代表我脑放..

UserManager 能够检查密码,因为我的 UserStore 实现了以下方法

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

}

问题出在 AWSUser class,它有以下方法

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

由于我错误地返回了 ID,那当然失败了..