Asp.net UserManager FindAsync方法调用
新的ASP.NET MVC 5项目模板生成一个准备好的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
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方法中,我编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。