我正在試驗 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 中配置,添加身份時)。
如果您希望它成功,您將必須從特定密碼返回一個真實的計算哈希,否則它會識別輸入的密碼返回一個不同的哈希,然后是“存儲”的哈希,并導致登錄失敗。
僅僅因為您正在偽造/實現用戶存儲并不意味著不會執(zhí)行哈希驗證。
public Task<string> GetPasswordHashAsync(MyIdentityUser user, CancellationToken cancellationToken)
{
var hash = new PasswordHasher<MyIdentityUser>().HashPassword(user, "asdf");
return Task.FromResult(hash)
}
可以,但請注意,如果您更改密碼哈希算法,它可能會失敗,因為您正在new使用它,這意味著它使用密碼哈希的默認選項。
- 1 回答
- 0 關注
- 151 瀏覽
添加回答
舉報
0/150
提交
取消