2015-09-04 60 views
3

我正在創建一個新的ASP.NET Web應用程序,我不打算利用「角色」的概念。但是,我確實想確保用戶在某些頁面上登錄。是否有任何現有的屬性只是簡單地檢查用戶是否登錄並重定向它們,或者如果它們不是?我所做的每個搜索都指向使用角色(如this one)。使用授權屬性來驗證用戶登錄

+1

裝飾與動作的'[授權]'當用戶登錄屬性只會成功返回還有'Request.IsAuthenticated' – trashr0x

+0

你也可以添加[。授權]屬性給整個班級。 – Anonymous

+0

看看這個問題http://stackoverflow.com/questions/32095889/mvc-authentication-easiest-way/32096289#32096289 希望它有幫助。 –

回答

7

[Authorize]屬性將只能成功返回,如果發起請求的用戶登錄並且只能在控制器和操作方法上工作。

它可以用來裝飾一個特定的動作:

...或者整個控制器:

// all actions in FooController require authentication 
[Authorize] 
public class FooController : Controller 
{ 
    public async Task<ActionResult> FooAction() 
    {   

    } 

    public async Task<ActionResult> BarAction() 
    { 

    } 
} 

你也有Request.IsAuthenticated它可以同時在行動和非使用動作方法:

if (Request.IsAuthenticated) //or @if in Razor 
{ 
    //request is authenticated 
} 

...甚至User.Identity.IsAuthenticated as @Darko corre在他的回答中指出。我個人更喜歡Request.IsAuthenticated而不是User.Identity.IsAuthenticated,因爲它還爲UserUser.Identity提供了一些有用的空值檢查。以下是如何Request.IsAuthenticated看起來引擎蓋下:

public bool IsAuthenticated 
{ 
    get 
    { 
     return(_context.User != null 
       && _context.User.Identity != null 
       && _context.User.Identity.IsAuthenticated); 
    } 
} 
+1

很好的回答!我會利用這些選項中的每一個。 – muttley91

+0

很高興我能幫到你。 – trashr0x

-2

您可以使用User屬性,只需將if()設置爲可以控制訪問權限即可。 保護無效的Page_Load(對象發件人,EventArgs的)

{ 
    if (User.Identity.IsAuthenticated) 
    { 
     Page.Title = "Home page for " + User.Identity.Name; 
    } 
    else 
    { 
     Page.Title = "Home page for guest user."; 
    } 
} 

你設置的web.config後,這應該工作。這裏是文檔https://msdn.microsoft.com/en-us/library/9wff0kyh(v=vs.85).aspx

+2

問題與您的鏈接 - 它談論表單身份驗證。而問題的身份框架是關於不使用它的。雖然檢查'IsAuthenticated'的代碼部分是正確的,但其餘樣本不是 - 在MVC中沒有'Page'對象 - 您正在談論WebForms,而問題不在於WebForms。 – trailmax

+0

沒有更多的補充,只是downvoted,因爲它與用戶的問題沒有關係,雖然它是重要的信息都是一樣的。 – maniak1982