UserManager.FindAsync 使用自定义 Userstore 的 FindByIdAsync 方法而不是 FindByNameAsync

Posted

技术标签:

【中文标题】UserManager.FindAsync 使用自定义 Userstore 的 FindByIdAsync 方法而不是 FindByNameAsync【英文标题】:UserManager.FindAsync to use custom Userstore's FindByIdAsync method instead of FindByNameAsync 【发布时间】:2016-08-09 23:58:46 【问题描述】:

我正在使用身份框架。 当我登录到我的应用程序时,appUser 检索 UserManager 如下:

Patient patient = await UserManager.FindAsync(model.Id, model.Password);

据我调试了解,UserManager.FindAsync 使用来自 UserStore 的 FindByNameAsync(string userName)(我有一个自定义 UserStore)。

问题是:如何告诉 UserManager.FindAsync 使用我的自定义 UserStore 的 FindByIdAsync 方法而不是 FindByNameAsync?

我还需要编写自定义 UserManager 吗?

提前致谢。

【问题讨论】:

【参考方案1】:

您可以在自定义 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;
        

【讨论】:

以上是关于UserManager.FindAsync 使用自定义 Userstore 的 FindByIdAsync 方法而不是 FindByNameAsync的主要内容,如果未能解决你的问题,请参考以下文章

scratch中自定义模块的数字或文本有啥用

使用自定义动画删除自定义 UIStoryboardSegue

wpf自定义控件中使用自定义事件

使用自定义注解做参数必填的校验

[WPF自定义控件库]使用WindowChrome自定义RibbonWindow

如何使用自定义表单和自定义流程