没有实体框架的PasswordSignInAsync和CreateAsync

时间:2019-02-13 05:01:02

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

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

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

2 个答案:

答案 0 :(得分:0)

即使您没有使用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) ...

答案 1 :(得分:0)

SignInAsync方法,然后在内存中创建一个用户对象。

var userPrincipal = await _signInManager.CreateUserPrincipalAsync(new 
   ApplicationUser
           {
                  Id = 1,
                  UserName = viewModel.UserName,
                  Email = viewModel.UserName,
                  SecurityStamp = Guid.NewGuid().ToString()
           });
     foreach(var claim in userPrincipal.Claims)
     {
            appUser.Claims.Add(new ApplicationUserClaim { UserId = appUser.Id, 
            ClaimType = claim.Type, ClaimValue = claim.Value });
     }
     await _signInManager.SignInAsync(appUser, viewModel.RememberMe);
相关问题