2013-04-06 2 views
8

In einer MVC4 App in einer Controller-Logik ich überprüfen möchten, ob der Benutzer angemeldet ist
Sollte ich:.User.Identity.IsAuthenticated vs WebSecurity.IsAuthenticated

User.Identity.IsAuthenticated 

Oder:

WebSecurity.IsAuthenticated 

Soweit ich weiß WebSecurity ist nur ein Wrapper. Sollte ich es verwenden oder User.Identity hat unterschiedliche Funktionalität?

Antwort

7

Soweit ich weiß WebSecurity ist nur ein Wrapper.

Das stimmt, beide sind gleich. Werfen wir einen Blick darauf, wie die WebSecurity.IsAuthenticated Eigenschaft implementiert:

public static bool IsAuthenticated 
{ 
    get 
    { 
     return Request.IsAuthenticated; 
    } 
} 

und die jetzt schauen lassen, wie das die WebSecurity.Request statische Eigenschaft implementiert:

internal static HttpRequestBase Request 
{ 
    get 
    { 
     return Context.Request; 
    } 
} 

und die schließlich einen Blick lassen haben, wie die WebSecurity.Context

internal static HttpContextBase Context 
{ 
    get 
    { 
     return new HttpContextWrapper(HttpContext.Current); 
    } 
} 

so wie Sie sehen können: statische Eigenschaft implementiert

WebSecurity.IsAuthenticated 

ist die gleiche wie:

new HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated 

wiederum die die gleichen wie Context.User.Identity.IsAuthenticated mit einem kleinen Unterschied ist, dass es null Kontrollen sind und die Eigenschaft wird falsch zurück, wenn zum Beispiel der Identity Eigenschaft null ist.

Sollte ich es verwenden oder Benutzer.Identity hat unterschiedliche Funktionalität?

Auch wenn die beiden sind absolut gleichwertig würde ich die User.Identity verwenden, die die offizielle ASP.NET-Implementierung ist, denn wenn morgen entscheiden, die einfache Mitgliedschaft Anbieter mit etwas zu ersetzen, sonst werden Sie weit weniger Dinge in ersetzen Ihre Code.

+0

Folgen Sie Ihrem Rat, um die UserId zu erhalten, werde ich nicht WebSecurity.CurrentUserId verwenden, und stattdessen Membership.GetUser(). ProviderUserKey? –

+2

Ja, die beiden sind auch gleich. Sie können das, das Sie bevorzugen, mit demselben Ergebnis verwenden. –

Verwandte Themen