新的ASP.NET MVC 5项目模板生成一个准备好的AccountController
,其中包括UserManager
和基础商店(IUserStore
,IRoleStore
等的基本实现。 )。
本教程介绍如何实现自定义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次查询,这会影响性能。
答案 0 :(得分:0)
当您的UserStore使用FindByNameAsync()获取用户时,它只会查找并验证用户的存在。
当您获取用户信息时,您不会将密码返回给应用程序,因此这就是GetPasswordHashAsync()方法再次调用数据库以获取用户密码哈希的原因。