我正在尝试将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();
}
答案 0 :(得分:0)
您可以通过调用_userManager.FindByLoginAsync()
或使用_userManager.Users
属性来获取用户详细信息,只需使用linq查询检索用户即可。您将能够获得您的ApplicationUser。
如果您想使用存储过程存储/获取用户信息,那么您必须覆盖UserStore。这是简短的概述:
请点击此处查看详细信息:http://www.asp.net/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity
答案 1 :(得分:0)
答案是没有解决方案。 Identity框架需要某种方式来访问所有用户数据,即FindByName / FindById。需要创建这两种方法或不能进行身份验证。我的数据库无法提供此服务,因此,Identity框架不会发生。
工作解决方案是删除身份并直接使用Cookie身份验证,并按预期工作。