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);
}
}
問候
手動添加你有'<認證模式=「表格」>'在web.config中定義? – 2015-02-10 10:28:20
@DZL不,我沒有在webconfig中定義任何表單 – 2015-02-10 10:29:24
您正在使用表單身份驗證(FormsAuthentication.SetAuthCookie(loginInfo.Name,false);),因此您需要在web.config中定義它。將它添加到web.config,它應該開始工作。 – 2015-02-10 10:30:07