自定义 IUser 实现 - 验证密码
Custom IUser implementation - Validate password
我在使用 UserManager.CheckPassword(...)
和自定义 IUser
实现时遇到问题。
我在 Owin 中使用 .net Identity,创建我自己的 IUser
和 IUserStore
实现。
对于商店,我只使用可选的电子邮件和密码商店。
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,那当然失败了..
我在使用 UserManager.CheckPassword(...)
和自定义 IUser
实现时遇到问题。
我在 Owin 中使用 .net Identity,创建我自己的 IUser
和 IUserStore
实现。
对于商店,我只使用可选的电子邮件和密码商店。
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,那当然失败了..