首页 > 解决方案 > 没有实体框架的 PasswordSignInAsync 和 CreateAsync

问题描述

SignInManager.PasswordSignInAsync检查用户是否存在于数据库中并登录。await UserManager.CreateAsync在数据库中创建新用户。await SignInManager.SignInAsync登录用户。

如果我错了,请纠正我,但这对这个问题来说微不足道。当我们不在 ASP.NET MVC 中使用实体框架时,如何实现这些功能?

标签: asp.net-mvcasp.net-identity

解决方案


即使您不使用 EF,也无需实现这些方法

您可以通过使用 IUserStore 注册自定义类并调用它们来使用您自己的数据库访问来依赖 asp.net 身份

我已经关注了这篇文章,即使使用我自己编写的数据访问层,成员资格也能正常工作:

https://markjohnson.io/articles/asp-net-core-identity-without-entity-framework/

基本上你必须:

  1. 写你的数据库访问(当然)
  2. 为用户(以及角色等)创建模型
  3. 创建一个实现 IUserStore 的 UserStore,处理 YourCustomModel 方法
  4. 在应用程序的启动中添加 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) ...

推荐阅读