2013-07-31 69 views
0

我做了我自己的授權屬性,而這也正是它看起來像用戶沒有定製的授權屬性認證

public class RedirectAuthorize : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      filterContext.Result = new RedirectToRouteResult(new 
      RouteValueDictionary(new { controller = "NotExist" }));    
     } 
    } 
} 

因此,如果用戶沒有通過驗證,我希望他們重定向到NotExist控制器。我調試過了,似乎未經授權的用戶可以進入if子句,這是正確的。但我也嘗試過使用登錄用戶來做這件事,並且他們也得到了if子句,這也是錯誤的。

我不明白爲什麼會發生這種情況。這讓我猶豫是否登錄無效。這是登錄用戶的正確方式嗎?

FormsAuthentication.SetAuthCookie(acc.username, false); 

我從來沒有在asp.net mvc中做過登錄系統,所以請告訴我我做錯了什麼。

編輯:

似乎默認的[授權]屬性不工作要麼...我真的覺得在日誌中的問題奠定了在:

[HttpPost] 
public ActionResult Login(User acc) 
{ 
    if(ModelState.IsValid) 
    { 
     if (Validate(acc.username, acc.password)) 
     { 
      FormsAuthentication.SetAuthCookie(acc.username, false); 
      return RedirectToAction("Index", "System"); 
     } 
    } 

    ModelState.AddModelError("IncorrectDetails", "Wrong details. Please try again."); 
    return View(acc); 

} 
+0

我也有這個問題:當你被授權時你是否應該進入HandleUnauthorizedRequest()? – user1534664

回答

1

定製授權屬性看起來正確。

由於您自己設置了cookie,我猜測您並未使用內置的成員資格提供程序。

如果您自己設置cookie,則還需要讀取auth cookie並在每個請求上設置Identity和Principal對象。否則,HttpContext.User.Identity.IsAuthenticated將始終爲false,這似乎是您正在經歷的。

+0

非常感謝,夥計。你會推薦一種自制CMS系統的方法嗎?我只有一個用戶。我認爲內置會員? – user1534664

+0

最安全的方法是使用SQLMembership提供程序或新的SimpleMembership(http://www.codeguru.com/csharp/.net/net_asp/mvc/using-simplemembership-in- asp.net-mvc-4.htm) –

+0

我也可以使用SimpleMembership for razor嗎?在教程中,他們絕對使用aspx – user1534664