2013-04-06 9 views
8

In un app MVC4, in una logica di controllo che voglio per verificare se l'utente è connesso
dovrei usare:.User.Identity.IsAuthenticated vs WebSecurity.IsAuthenticated

User.Identity.IsAuthenticated 

Oppure:

WebSecurity.IsAuthenticated 

Per quanto ne so, lo WebSecurity è solo un involucro. Dovrei usarlo o User.Identity ha diverse funzionalità?

risposta

7

Per quanto ne so, WebSecurity è solo un wrapper.

Questo è corretto, entrambi sono uguali. Diamo uno sguardo a come la proprietà WebSecurity.IsAuthenticated è implementata:

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

e ora diamo un'occhiata a come la proprietà statica WebSecurity.Request è implementata:

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

e, infine, diamo uno sguardo a come il WebSecurity.Context proprietà statica è implementata:

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

Quindi, come potete vedere:

WebSecurity.IsAuthenticated 

è uguale a:

new HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated 

che a sua volta è la stessa Context.User.Identity.IsAuthenticated con una leggera differenza che ci sono controlli nulli e la proprietà restituirà false se ad esempio la proprietà Identity è nullo.

Devo usarlo o User.Identity ha diverse funzionalità?

Anche se i due sono strettamente equivalenti Vorrei utilizzare il User.Identity, che è l'implementazione ufficiale di ASP.NET, perché se domani si decide di sostituire il semplice provider di appartenenza con qualcos'altro si avrà molto meno cose da sostituire nella vostra codice.

+0

Quindi, seguendo il tuo consiglio, per ottenere l'ID utente, non userò WebSecurity.CurrentUserId e utilizzerò invece Membership.GetUser(). ProviderUserKey? –

+2

Sì, anche i due sono uguali. Puoi usare quello che preferisci con lo stesso risultato. –

Problemi correlati