我正在试验 Aspnet Core 2.2,并IdentityUser用我的MyIdentityUser. 当我尝试登录时,我得到“无效的登录尝试”。为了让我登录,我错过了什么?该ConfigureServices方法使用 my 设置身份,MyIdentiyUser如下MyIUserStore所示:services.AddDefaultIdentity<MyIdentityUser>() .AddDefaultUI(UIFramework.Bootstrap4) .AddUserStore<MyUserStore>();通过尽可能谨慎地实现所有方法(我从抛出每个方法开始IUserStore,然后实现被调用的方法),我得到了这个:IUserPasswordStoreNotImplementedExceptionpublic class MyUserStore : IUserStore<MyIdentityUser>, IUserPasswordStore<MyIdentityUser>{ public void Dispose() { } public Task<MyIdentityUser> FindByNameAsync(string normalizedUserName, CancellationToken cancellationToken) { var ret = new MyIdentityUser { Id = "1", UserName = normalizedUserName }; return Task.FromResult(ret); } public Task<string> GetUserIdAsync(MyIdentityUser user, CancellationToken cancellationToken) { return Task.FromResult(user.UserName); } public Task<string> GetPasswordHashAsync(MyIdentityUser user, CancellationToken cancellationToken) { return Task.FromResult("asdf"); } ... the rest of the methods throws exception.}为了完整,这里是我的MyIdentityUserpublic class MyIdentityUser{ public string Id {get;set;} public string UserName {get;set}}并开始_LoginPartial.cshtml@using Microsoft.AspNetCore.Identity@inject SignInManager<MyIdentityUser> SignInManager@inject UserManager<MyIdentityUser> UserManager
1 回答

婷婷同学_
TA贡献1844条经验 获得超8个赞
你返回一个空字符串作为哈希
public Task<string> GetPasswordHashAsync(MyIdentityUser user, CancellationToken cancellationToken)
{
return Task.FromResult(string.Empty);
}
但即使是空密码,也不会产生空的哈希字符串。最重要的是,使用了不同的算法(可以在 Startup.cs 中配置,添加身份时)。
如果您希望它成功,您将必须从特定密码返回一个真实的计算哈希,否则它会识别输入的密码返回一个不同的哈希,然后是“存储”的哈希,并导致登录失败。
仅仅因为您正在伪造/实现用户存储并不意味着不会执行哈希验证。
public Task<string> GetPasswordHashAsync(MyIdentityUser user, CancellationToken cancellationToken)
{
var hash = new PasswordHasher<MyIdentityUser>().HashPassword(user, "asdf");
return Task.FromResult(hash)
}
可以,但请注意,如果您更改密码哈希算法,它可能会失败,因为您正在new使用它,这意味着它使用密码哈希的默认选项。
- 1 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消