新的ASP.NET MVC5项目模板生成一个准备好的AccountController,包括UserManager和底层Store (IUserStore、IRoleStore等)的基本实现。
本教程介绍如何实现用于在自定义数据源http://www.asp.net/identity/overview/extensibility/implementing-a-custom-mysql-aspnet-identity-storage-provider中存储用户数据的自定义UserStore
但是,我实现了自己的UserStore,并认识到了以下几点:
在登录过程中,会调用AccountController中的UserManager.FindAsync(UserName, Password)-method:
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-method按以下顺序调用底层UserStore-methods:FindByNameAsync -> GetPasswordHashAsync -> FindByIdAsync。
我的问题是:为什么同时调用FindByNameAsync-和FindByIdAsync-methods?这会导致对数据库的2次查询,这会影响性能。
发布于 2014-10-19 05:14:38
当您的UserStore使用FindByNameAsync()获取您的用户时,它只是查找并验证用户的存在。
在获取用户信息时,您不会将密码返回给应用程序,因此这就是GetPasswordHashAsync()方法再次调用数据库来获取用户密码散列的原因。
https://stackoverflow.com/questions/22690052
复制相似问题