Asp.net mvc Asp核心,检查用户是否在Identity 1.1中扮演角色?
我正在使用asp.net core 1.1和identity 1.1。我的应用程序中有两个角色,分别是“管理员”和“用户”。我希望“管理员”用户在登录后导航到“/AdminProfile/Index”,而“用户”用户在登录后导航到“/UserProfile/Index” 我的登录代码:Asp.net mvc Asp核心,检查用户是否在Identity 1.1中扮演角色?,asp.net-mvc,asp.net-core,asp.net-identity,role-base-authorization,Asp.net Mvc,Asp.net Core,Asp.net Identity,Role Base Authorization,我正在使用asp.net core 1.1和identity 1.1。我的应用程序中有两个角色,分别是“管理员”和“用户”。我希望“管理员”用户在登录后导航到“/AdminProfile/Index”,而“用户”用户在登录后导航到“/UserProfile/Index” 我的登录代码: [HttpGet] public IActionResult Login(string returnUrl = null) { ViewData["ReturnUrl"]
[HttpGet]
public IActionResult Login(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError(string.Empty, "Error");
return View(model);
}
}
return View(model);
}
private IActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
if (User.IsInRole("Admin"))
{
return Redirect("/AdminProfile/Index");
}
else
{
return Redirect("/UserProfile/Index");
}
}
}
我使用
User.IsInRole(“Admin”)
验证用户角色,但它总是返回false。如何检查identity 1.1中的用户角色?经过多次研究,我可以解决这个问题。试试看:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
var user = await _userManager.FindByNameAsync(model.UserName);
string existingRole = _userManager.GetRolesAsync(user).Result.Single();
return RedirectToLocal(returnUrl,existingRole);
}
else
{
ModelState.AddModelError(string.Empty, "Error");
return View(model);
}
}
return View(model);
}
private IActionResult RedirectToLocal(string returnUrl,string roleName)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
if (roleName == "Admin")
{
return Redirect("/Admin/User");
}
else
{
return Redirect("/User/UserProfile");
}
}
}
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginViewModel模型,字符串returnUrl=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
if(ModelState.IsValid)
{
var result=wait _signInManager.PasswordSignInAsync(model.UserName、model.Password、model.RememberMe、lockoutOnFailure:false);
if(result.successed)
{
var user=await\u userManager.FindByNameAsync(model.UserName);
字符串existingRole=\u userManager.GetRolesAsync(user.Result.Single();
return RedirectToLocal(returnUrl,existingRole);
}
其他的
{
AddModelError(string.Empty,“Error”);
返回视图(模型);
}
}
返回视图(模型);
}
私有IActionResult重定向到本地(字符串返回URL、字符串角色名)
{
if(Url.islocalur(returnUrl))
{
返回重定向(returnUrl);
}
其他的
{
如果(roleName==“管理员”)
{
返回重定向(“/Admin/User”);
}
其他的
{
返回重定向(“/User/UserProfile”);
}
}
}
看一下答案,它应该会帮助您解决问题。