gpt4 book ai didi

asp.net - UserManager FindAsync 方法调用

转载 作者:行者123 更新时间:2023-12-02 18:15:02 28 4
gpt4 key购买 nike

新的 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 并认识到以下内容:

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

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 -> GetPasswordHashAsync -> FindByIdAsync

我的问题是:为什么同时调用 FindByNameAsyncFindByIdAsync 方法?这会导致对数据库进行 2 次查询,从而影响性能。

最佳答案

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

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

关于asp.net - UserManager FindAsync 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22690052/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com