Asp.net UserManager FindAsync方法调用

Asp.net UserManager FindAsync方法调用,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,新的ASP.NET MVC 5项目模板生成一个准备好的AccountController,包括UserManager和底层存储的基本实现(IUserStore,IRoleStore等) 本教程介绍如何实现自定义UserStore,以便在自定义数据源中存储用户数据: 但是,我实现了自己的UserStore,并认识到以下几点: 在登录过程中,调用AccountController中的UserManager.FindAsync(用户名、密码)-方法: public async Task<Acti

新的ASP.NET MVC 5项目模板生成一个准备好的
AccountController
,包括
UserManager
和底层存储的基本实现(
IUserStore
IRoleStore
等)

本教程介绍如何实现自定义UserStore,以便在自定义数据源中存储用户数据:

但是,我实现了自己的
UserStore
,并认识到以下几点:

在登录过程中,调用
AccountController
中的
UserManager.FindAsync(用户名、密码)
-方法:

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        **var user = await UserManager.FindAsync(model.UserName, model.Password);**
        //other code
    }
    return View(model);
}
公共异步任务登录(LoginViewModel模型,字符串返回URL)
{
if(ModelState.IsValid)
{
**var user=await UserManager.FindAsync(model.UserName,model.Password)**
//其他代码
}
返回视图(模型);
}
FindAsync
-方法按以下顺序调用底层的
UserStore
-方法:
FindByNameAsync
->
GetPasswordHashAsync
->
FindByIdAsync


我的问题是:为什么同时调用
FindByNameAsync
-和
FindByIdAsync
-方法?这将导致对数据库进行两次查询,这将影响性能。

当您的UserStore使用FindBynameAAsync()获取用户时,它只会查找并验证用户的存在性


获取用户信息时,不会将密码返回给应用程序,因此GetPasswordHashAsync()方法再次调用数据库以获取用户的密码哈希。

UserManager中的FindAsync(字符串用户名、字符串密码)方法不会调用FindByIdAsync,发出此调用的是此行var identity=await UserManager.createidentitysync(user,DefaultAuthenticationTypes.applicationcokie);在AccountControllerI的SignInAsyn方法中,我编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。