2016-05-31 23 views
3

mvc 6でログインしているユーザーの役割を取得するにはどうすればよいですか?私は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

関連する問題