C# 获取ASP.NET核心MVC中当前登录用户的角色
如何在ASP.NET Core MVC中获取登录用户的角色?我希望在用户登录到应用程序后立即获取角色详细信息,但使用以下代码无法检索角色详细信息C# 获取ASP.NET核心MVC中当前登录用户的角色,c#,asp.net-core,asp.net-core-mvc,user-roles,C#,Asp.net Core,Asp.net Core Mvc,User Roles,如何在ASP.NET Core MVC中获取登录用户的角色?我希望在用户登录到应用程序后立即获取角色详细信息,但使用以下代码无法检索角色详细信息 public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { v
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation(1, "User logged in.");
bool available = User.IsInRole("Admin");
return RedirectToLocal(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning(2, "User account locked out.");
return View("Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(model);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
不过,我还是无法获得角色的详细信息。有人能帮忙吗? 您可能想尝试通过<代码> FunByEMAIL()/代码>或其他方法加载实际的<代码>应用程序用户>代码>对象,并将该对象传递到<代码> GoReleSasyCy]()/Case>方法,如下所示:
// Resolve the user via their email
var user = await _userManager.FindByEmailAsync(model.Email);
// Get the roles for the user
var roles = await _userManager.GetRolesAsync(user);
更完整的示例可能如下所示:
[HttpPost("Auth/SignIn")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> SignIn(SignInViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, true, false);
if (result.Succeeded)
{
// Resolve the user via their email
var user = await _userManager.FindByEmailAsync(model.Email);
// Get the roles for the user
var roles = await _userManager.GetRolesAsync(user);
// Do something with the roles here
}
else
{
// Uh oh....
}
}
// Something is probably wrong, provide the form again....
return View(model);
}
[HttpPost(“认证/签名”)]
[ValidateAntiForgeryToken]
公共异步任务签名(签名视图模型,字符串返回URL=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
if(ModelState.IsValid)
{
var result=wait _signInManager.PasswordSignInAsync(model.Email,model.Password,true,false);
if(result.successed)
{
//通过用户的电子邮件解析用户
var user=await\u userManager.findbyemailsync(model.Email);
//获取用户的角色
var roles=await\u userManager.GetRolesAsync(用户);
//对这里的角色做些什么
}
其他的
{
//哦。。。。
}
}
//可能有问题,请重新提供表单。。。。
返回视图(模型);
}
简短但有用:
[Route("api/[controller]")]
[ApiController]
public class RoleController : ControllerBase
{
private readonly UserManager<User> userManager;
public RoleController(
UserManager<User> userManager
)
{
this.userManager = userManager;
}
// GET api/role
[HttpGet]
[Authorize]
public async Task<IEnumerable<string>> Get()
{
var userId = User.FindFirstValue(ClaimTypes.Name);
var user = await userManager.FindByIdAsync(userId);
var role = await userManager.GetRolesAsync(user);
return role;
}
}
[路由(“api/[控制器]”)]
[ApiController]
公共类角色控制器:ControllerBase
{
私有只读用户管理器用户管理器;
公共角色控制器(
用户管理器用户管理器
)
{
this.userManager=userManager;
}
//获取api/角色
[HttpGet]
[授权]
公共异步任务Get()
{
var userId=User.FindFirstValue(ClaimTypes.Name);
var user=await userManager.FindByIdAsync(userId);
var role=await userManager.GetRolesAsync(用户);
返回角色;
}
}
希望有帮助。您需要从数据库中获取用户。您不能只创建一个新的用户实例并填写一些属性。如何获取角色id?
GetRolesAsync
接受字符串参数。我认为您的示例应该是\u userManager.GetRolesAsync(user.Id)
[Route("api/[controller]")]
[ApiController]
public class RoleController : ControllerBase
{
private readonly UserManager<User> userManager;
public RoleController(
UserManager<User> userManager
)
{
this.userManager = userManager;
}
// GET api/role
[HttpGet]
[Authorize]
public async Task<IEnumerable<string>> Get()
{
var userId = User.FindFirstValue(ClaimTypes.Name);
var user = await userManager.FindByIdAsync(userId);
var role = await userManager.GetRolesAsync(user);
return role;
}
}