具有受限数据库后端的asp.net 5 mvc 6标识

时间:2016-01-19 08:23:59

标签: database stored-procedures identity asp.net-core-mvc

我正在尝试将MVC6 Identity 3与一个不为查找用户提供接口的数据库。但它确实允许我向存储过程发送用户名和密码,作为回报,我获得了用户的访问ID和真实姓名。如果没有经过身份验证,我就无法获得任何其他内容,即使使用,我也无法通过id查询其他用户。

现在,知道这一点,是否可以将Identity框架与自定义UserManager一起使用来执行密码检查并检索用户详细信息?

我已经覆盖了允许我检查用户名和密码的CheckPasswordAsync方法:

    public override Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
    {
        bool success = false;
        // query the database via stored procedure (only Login supported)
        var result = _dataAccess.Login(user.Login, password);
        if (result != null)
        {
            //user.UserId = result.id;
            //user.FirstNames = result.first_names;
            //user.LastName = result.last_name;
            success = true;
        }
        return Task<bool>.Factory.StartNew(() => success);
    }

评论的行是一厢情愿的想法...我想从我的控制器访问这些字段:

    [HttpPost]
    [AllowAnonymous]
    public async Task<IActionResult> Login(LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
            if (result.Succeeded)
            {
                // get the current user details and return them.
                // but how?
                var userDetails = { ... };
                return Ok(userDetails);
            }
            if (result.IsLockedOut)
            {
                return new HttpStatusCodeResult((int)HttpStatusCode.Forbidden);
            }
            else
            {
                return HttpUnauthorized();
            }
        }
        return HttpUnauthorized();
    }

2 个答案:

答案 0 :(得分:0)

您可以通过调用_userManager.FindByLoginAsync()或使用_userManager.Users属性来获取用户详细信息,只需使用linq查询检索用户即可。您将能够获得您的ApplicationUser。

如果您想使用存储过程存储/获取用户信息,那么您必须覆盖UserStore。这是简短的概述:

enter image description here

请点击此处查看详细信息:http://www.asp.net/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity

答案 1 :(得分:0)

答案是没有解决方案。 Identity框架需要某种方式来访问所有用户数据,即FindByName / FindById。需要创建这两种方法或不能进行身份验证。我的数据库无法提供此服务,因此,Identity框架不会发生。

工作解决方案是删除身份并直接使用Cookie身份验证,并按预期工作。