UserManager FindAsync方法调用

时间:2014-03-27 14:05:38

标签: asp.net asp.net-mvc

新的ASP.NET MVC 5项目模板生成一个准备好的AccountController,其中包括UserManager和基础商店(IUserStoreIRoleStore等的基本实现。 )。

本教程介绍如何实现自定义UserStore,以便在自定义数据源中存储用户数据:http://www.asp.net/identity/overview/extensibility/implementing-a-custom-mysql-aspnet-identity-storage-provider

但是,我实施了自己的UserStore并认可了以下内容:

在登录过程中,调用UserManager.FindAsync(UserName, Password)内的AccountController - 方法:

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);
}

FindAsync - 方法按以下顺序调用基础UserStore - 方法:FindByNameAsync - &gt; GetPasswordHashAsync - &gt; FindByIdAsync

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

1 个答案:

答案 0 :(得分:0)

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

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