在 MVC 中覆盖 HandleUnauthorizedRequest,导致登录页面不工作

override HandleUnauthorizedRequest in MVC ,causes Login page doesn't work

我的 MVC 应用程序中有 3 个区域 teacher,member,administrator。每个区域都有一个登录页面,我的意思是:

../aministrator/cms/login
../member/cms/login
../teacher/cms/login

我的登录控制器是这样的:

 [HttpGet]
        public ActionResult Login(string returnUrl)
        {
            return View(); // show the login page
        }
        UserRepository ObjUserRepository = new UserRepository();
        [HttpPost]
        public ActionResult Login(DomainClass.User loginInfo, string returnUrl)
        {
            if (ObjUserRepository.FindBy(i => i.Email == loginInfo.Email & i.Password == loginInfo.Password).Any())
            {
                DomainClass.User objUser = ObjUserRepository.FindBy(i => i.Email == loginInfo.Email & i.Password == loginInfo.Password).FirstOrDefault();

                FormsAuthentication.SetAuthCookie(loginInfo.Name, false);
                if (shouldRedirect(returnUrl))
                {
                    return Redirect(returnUrl);
                }

                if (objUser.Pemission == "professor")
                {
                    return RedirectToAction("Index", "Home", new { area = "Teacher" });
                }


            }

            return View(loginInfo);
        }

我在每个区域都有一个 home 控制器。我的意思是登录后页面应该重定向到 home/index

我家的控制器是这样的:

   [AreaAuthorize("Teacher")]

    public class HomeController : Controller
    {
        //
        // GET: /Teacher/Home/

        public ActionResult Index()
        {
            return View();
        }

    }

但问题是页面无法重定向到 /home/index,它仍保留在 cms/login,为什么?

覆盖授权:

public class AreaAuthorizeAttribute : AuthorizeAttribute
    {
        private readonly string area;

        public AreaAuthorizeAttribute(string area)
        {
            this.area = area;
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            string loginUrl = "";

            if (area == "Administrator")
            {
                loginUrl = "~/Administrator/CMS/Login";
            }
            else if (area == "Member")
            {
                loginUrl = "~/User/CMS/Login";
            }
            else if (area == "Teacher")
            {
                loginUrl = "~/Teacher/CMS/Login";
            }

            filterContext.Result = new RedirectResult(loginUrl + "?returnUrl=" + filterContext.HttpContext.Request.Url.PathAndQuery);
        }
    }

此致

要将解决方案也作为答案:

对于 MVC 5,默认身份验证基于OWIN 身份验证中间件。

如果要使用FormsAuthentication,需要在web.config

中手动添加
<authentication mode="Forms">
  <forms timeout="50000000" />
</authentication>