根据角色重定向ASP.net MVC会员身份验证

4
我有两种角色[管理员,HelpDeskAdmin]。
我有一个单一的登录视图(两个用户都进入同一个链接登录),我想在登录后检查他们的角色,并在验证后重定向到他们各自的管理员页面。下面的代码第一次不会将已登录的用户识别为所在的角色,并重新加载登录页面,第二次登录时会正确地重定向。
这是否与身份验证cookie在第一次检查时未设置有关?我该如何完成此场景?
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
  if (MembershipService.ValidateUser(model.UserName, model.Password))
  {
     FormsService.SignIn(model.UserName, model.RememberMe);
     if (!String.IsNullOrEmpty(returnUrl))
     {
         return Redirect(returnUrl);
     }
     else
     {
         if (Roles.IsUserInRole("Admin"))
         {
              //go to admin landing page
              return RedirectToAction("Index", "Manage"); 
         }
          else if (Roles.IsUserInRole("HelpDesk"))
          {
              //go to helpdesk landing page
              return RedirectToAction("Index", "Interview"); 
          }
          else /******FIRST TIME THROUGH IT ALWAYS GOES HERE *******/
             return RedirectToAction("Index", "Home");  //not in any of those roles
      }
}
else
     {
       ModelState.AddModelError("", "The user name or password provided is incorrect.");
      }
}
 // If we got this far, something failed, redisplay form
return View(model);
} 
1个回答

7

在处理下一个请求并设置身份验证Cookie之前,用户技术上尚未登录....

要么在另一个操作方法中执行重定向逻辑,要么从此操作中提取用户信息,使用Roles.IsUserInRole(model.UserName, "Admin") [[注意指定用户名]]。


1
好的,谢谢。我把重定向逻辑移到了一个 LoginRedirect 动作方法中,在登录验证通过后进行重定向。 - jrob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接