2015-04-21 121 views
1
[HttpPost] 
    public ActionResult Login(UserVM userVM) 
    {   
     if (ModelState.IsValid || userVM.CheckWindowsAuth) 
      { 
       _userLF.UserName = userVM.UserName; 
       _userLF.Password = userVM.Password; 

       if (_userLF.AuthenticateUser(_userLF, userVM.CheckWindowsAuth)) 
       { 
       } 

上面這行代碼用我的用戶名和密碼進行驗證,並返回true或false。MVC中的授權

我已經加入授權屬性對所有其他控制器類似如下:

[Authorize] 
public class ClaimsController : Controller 
{} 

當我在我的登錄方法如下行確認用戶是通過返回true認證成功,我希望[授權]要在覆蓋其他控制器。

if (_userLF.AuthenticateUser(_userLF, userVM.CheckWindowsAuth)) 
{ 
} 

例如下面甚至當用戶認證返回true,而是因爲我已經給授權歸因於家庭控制器控制不進入家庭控制器控制器。我想授權屬性知道用戶已經通過身份驗證,並讓申請成功映射到我的行動在這個控制器(這樣我就可以打開主頁):

[Authorize] 
public class ClaimsController : Controller 
{ 
} 
+3

是什麼問題? – Ksv3n

+0

即使用戶身份驗證返回true,但由於我已將Authorize屬性授予Home控制器,控件不會進入Home Controller ...我想授權屬性來知道用戶是真實的並讓控件進入內部,因此我可以打開Home頁面... –

+0

我是否正確理解您的問題?我根據自己的理解添加了一個答案,看看是否有幫助。 – SBirthare

回答

0

如果你不想使用ASP內置的東西像MembershipProviderIdentity,最快的方法是創建一個自定義授權屬性。請查詢this linkthis link瞭解更多信息。

要使您的自定義屬性起作用,它需要獲取您的_userLF中的信息。這可以存儲在會話中。因此,在Login方法您檢查用戶的信息並將其存儲在會話中,此信息稍後將由您的定製授權屬性使用,然後在註銷時使用Session.Clear()清除此信息。您可以檢查this answer以獲取屬性的示例。

0

您可以創建自己的授權屬性。 事情是這樣的:

public class MyAuthorizeAttribute : AuthorizeAttribute 
    { 
     public override bool Authorize() 
     { 
      //Your logic here  
      if (_userLF.AuthenticateUser(_userLF, userVM.CheckWindowsAuth)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 

,並在控制器中使用這個新創建的屬性:

[MyAuthorizeAttribute] 
public class ClaimsController : Controller 
{ 
} 
0

如果我理解你正確的問題,我想你需要設置驗證cookie的,如果您以後使用FormsAuthentication成功認證。

你可以通過調用這樣做:

FormsAuthentication.SetAuthCookie(username, rememberMe); 

以上調用將創建指定用戶名的身份驗證票證並將其附加到傳出響應的Cookies集合。

所以基本上你的代碼如下所示:

[HttpPost] 
    public ActionResult Login(UserVM userVM, bool rememberMe = false) 
    { 
     if (ModelState.IsValid || userVM.CheckWindowsAuth) 
     { 
      _userLF.UserName = userVM.UserName; 
      _userLF.Password = userVM.Password; 

      if (_userLF.AuthenticateUser(_userLF, userVM.CheckWindowsAuth)) 
      { 
       FormsAuthentication.SetAuthCookie(userVM.UserName, rememberMe); 
      } 
     } 
    } 

一旦認證標記設置,將在每一個請求被髮送,你會看到Request.IsAuthenticated爲true。 Authorize屬性會讓請求通過這個設置到目標控制器的動作。