【发布时间】:2016-01-21 15:18:18
【问题描述】:
我正在尝试将 MVC6 Identity 3 与不提供查找用户接口的数据库一起使用。然而,它允许我将用户名和密码发送到存储过程,作为回报,我得到用户的访问 ID 和真实姓名。如果没有经过身份验证,我将无法获得其他任何东西,即使有,我也无法通过 id 查询其他用户。
现在,知道这一点,是否可以使用带有自定义 UserManager 的 Identity 框架来执行密码检查和检索用户详细信息?
我已经重写了允许我检查用户名和密码的 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();
}
【问题讨论】:
标签: database stored-procedures identity asp.net-core-mvc