2013-04-06 26 views
8

Trong một ứng dụng MVC4, trong một logic điều khiển tôi muốn kiểm tra xem người dùng sẽ được đăng nhập
Tôi có nên sử dụng:.User.Identity.IsAuthenticated vs WebSecurity.IsAuthenticated

User.Identity.IsAuthenticated 

Hoặc:

WebSecurity.IsAuthenticated 

Theo như tôi biết WebSecurity chỉ là trình bao bọc. Tôi có nên sử dụng nó hoặc User.Identity có chức năng khác không?

Trả lời

7

Theo tôi biết WebSecurity chỉ là trình bao bọc.

Đúng vậy, cả hai đều giống nhau. Chúng ta hãy có một cái nhìn tại như thế nào WebSecurity.IsAuthenticated tài sản được thực hiện:

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

và bây giờ chúng ta hãy nhìn vào cách các WebSecurity.Request thuộc tính tĩnh được thực hiện:

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

và cuối cùng chúng ta hãy có một cái nhìn tại như thế nào WebSecurity.Context thuộc tính tĩnh được thực hiện:

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

vì vậy, như bạn có thể thấy:

WebSecurity.IsAuthenticated 

là giống như:

new HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated 

do đó cũng giống như Context.User.Identity.IsAuthenticated với một khác biệt nhỏ mà có kiểm tra vô bất động sản sẽ trở lại false nếu ví dụ như Identity tài sản là null.

Tôi có nên sử dụng nó hoặc User.Identity có chức năng khác không?

Thậm chí nếu hai là phương pháp giống hệt tôi sẽ sử dụng User.Identity đó là ASP.NET thực hiện chính thức vì nếu ngày mai bạn quyết định thay thế các nhà cung cấp thành viên đơn giản với một cái gì đó khác mà bạn sẽ có những thứ xa ít hơn để thay thế trong bạn mã.

+0

Vì vậy, sau lời khuyên của bạn, để có được UserId, tôi sẽ không sử dụng WebSecurity.CurrentUserId, và thay vào đó sử dụng Membership.GetUser(). ProviderUserKey? –

+2

Có, cả hai cũng giống nhau. Bạn có thể sử dụng cái bạn thích với cùng một kết quả. –