asp.net-mvc - 没有实体框架的 PasswordSignInAsync 和 CreateAsync
问题描述
SignInManager.PasswordSignInAsync
检查用户是否存在于数据库中并登录。await UserManager.CreateAsync
在数据库中创建新用户。await SignInManager.SignInAsync
登录用户。
如果我错了,请纠正我,但这对这个问题来说微不足道。当我们不在 ASP.NET MVC 中使用实体框架时,如何实现这些功能?
解决方案
即使您不使用 EF,也无需实现这些方法
您可以通过使用 IUserStore 注册自定义类并调用它们来使用您自己的数据库访问来依赖 asp.net 身份
我已经关注了这篇文章,即使使用我自己编写的数据访问层,成员资格也能正常工作:
https://markjohnson.io/articles/asp-net-core-identity-without-entity-framework/
基本上你必须:
- 写你的数据库访问(当然)
- 为用户(以及角色等)创建模型
- 创建一个实现 IUserStore 的 UserStore,处理 YourCustomModel 方法
- 在应用程序的启动中添加 UserStore 作为服务
然后,由于依赖注入,您可以在 Controller 中引用身份管理器
private readonly UserManager<YourCustomModel> _userManager;
private readonly SignInManager<YourCustomModel> _signInManager;
public YourCustomController(
UserManager<YourCustomModel> userManager,
SignInManager<YourCustomModel> signInManager
)
{
_userManager = userManager;
_signInManager = signInManager;
}
并在您的操作中使用它们来调用身份方法:
var uModel = YourCustomModel.Static.SelectByEmail(vModel.Email);
var result = await _signInManager.PasswordSignInAsync(uModel, vModel.Password,
vModel.RememberMe, lockoutOnFailure: false);
if (result.Succeeded) ...