2016-05-31 112 views
3

如何在mvc 6中获取登录用户的角色/ s?我想在进入应用程序用户登录,但通过下面的代码,一旦获得角色的细节,我无法检索角色细节在MVC中获取当前登录用户的角色6

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); 
    } 

另外,我还用下面的方法,如

var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 

var userRoles = await _userManager.GetRolesAsync(user); 

不过,我无法获得角色的详细信息。任何人都可以请帮忙吗?

+0

您需要从数据库中提取用户。你不能只创建一个新的用户实例并填写一些属性。 –

回答

8

你可能要考虑尝试通过FindByEmail()或一些其他方法来加载实际ApplicationUser对象并将该对象到GetRolesAsync()方法如下所示:

// 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); 
} 
+0

我如何获得角色ID? – Rohit