覆盖MVC中的HandleUnauthorizedRequest,导致登录页面无法正常工作

时间:2015-02-09 17:58:32

标签: asp.net asp.net-mvc asp.net-mvc-4 authentication

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

../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控制器.i表示登录后页面应重定向到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);
        }
    }

最好的问候

1 个答案:

答案 0 :(得分:1)

将解决方案作为答案:

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

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

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