UserManager.FindAsync 使用自定义用户存储的 FindByIdAsync 方法而不是 FindByNameAsync
UserManager.FindAsync to use custom Userstore's FindByIdAsync method instead of FindByNameAsync
我正在使用身份框架。
当我登录到我的应用程序时,appUser 按如下方式检索 UserManager:
Patient patient = await UserManager.FindAsync(model.Id, model.Password);
我从调试中了解到,UserManager.FindAsync 使用 UserStore 中的 FindByNameAsync(string userName)
(我有一个自定义 UserStore)。
问题是:如何告诉 UserManager.FindAsync 使用自定义 UserStore 的 FindByIdAsync 方法而不是 FindByNameAsync?
我还需要编写自定义 UserManager 吗?
提前致谢。
您可以覆盖自定义 UserManager 中的方法
public class ApplicationUserManager : UserManager<AppUser, string>
{
public override async Task<AppUser> FindAsync(string id, string password)
{
var user = await FindByIdAsync(id).WithCurrentCulture();
if (user == null)
{
return null;
}
return await CheckPasswordAsync(user, password).WithCurrentCulture() ? user : null;
}
}
我正在使用身份框架。 当我登录到我的应用程序时,appUser 按如下方式检索 UserManager:
Patient patient = await UserManager.FindAsync(model.Id, model.Password);
我从调试中了解到,UserManager.FindAsync 使用 UserStore 中的 FindByNameAsync(string userName)
(我有一个自定义 UserStore)。
问题是:如何告诉 UserManager.FindAsync 使用自定义 UserStore 的 FindByIdAsync 方法而不是 FindByNameAsync?
我还需要编写自定义 UserManager 吗?
提前致谢。
您可以覆盖自定义 UserManager 中的方法
public class ApplicationUserManager : UserManager<AppUser, string>
{
public override async Task<AppUser> FindAsync(string id, string password)
{
var user = await FindByIdAsync(id).WithCurrentCulture();
if (user == null)
{
return null;
}
return await CheckPasswordAsync(user, password).WithCurrentCulture() ? user : null;
}
}