2015-02-09 20 views
0

我在我的MVC應用3個方面teacher,member,administrator。每個區域有一個登錄頁面,我的意思是:覆蓋HandleUnauthorizedRequest,導致登錄頁面不能正常運行

../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

我的坎E控制器是這樣的:

[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

手動添加你有'<認證模式=「表格」>'在web.config中定義? – 2015-02-10 10:28:20

+0

@DZL不,我沒有在webconfig中定義任何表單 – 2015-02-10 10:29:24

+1

您正在使用表單身份驗證(FormsAuthentication.SetAuthCookie(loginInfo.Name,false);),因此您需要在web.config中定義它。將它添加到web.config,它應該開始工作。 – 2015-02-10 10:30:07

回答

1

要讓溶液作爲答案,以及:

隨着MVC 5,默認的認證是基於OWIN認證的中間件。

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

<authentication mode="Forms"> 
    <forms timeout="50000000" /> 
</authentication>