2009-03-09 29 views
8

Tôi lưu trữ dữ liệu người dùng trong bảng MSSQL được gọi là Người dùng. Những gì tôi muốn là có thể truy cập dữ liệu của tất cả người dùng cho người dùng thực sự đăng nhập (email, địa chỉ, điện thoại, nếu người dùng là thuê bao, vv).Tư cách thành viên, MembershipProvider và MembershipUser trong ASP.NET?

Tôi không muốn sử dụng hồ sơ vì vậy tôi quyết định sử dụng MembershipProvider tùy chỉnh (hoặc bạn có biết một số cách tốt hơn, ít đau đớn hơn không?).

Điều tôi không hiểu là Thành viênNgười dùng và tư cách thành viên. Nếu tôi kế thừa từ MembershipProvider, trong các phương thức overriden tôi kiểm soát dữ liệu truy cập từ và đến cơ sở dữ liệu.

Nhưng làm cách nào để sử dụng lớp được kế thừa từ MembershipProvider? Nếu tôi muốn để xác thực người dùng bằng cách sử dụng thành viên, tôi nên làm:

if(Membership.ValidateUser(string username, string password)) 
{ 
    FormsAuthentication.RedirectFromLoginPage(string username, string password); 
} 

Nhưng đâu là lớp kế thừa từ MembershipProvider? Và khi nào sử dụng một lớp được kế thừa từ MembershipUser? Và mối quan hệ giữa Thành viên và Thành viênProvider là gì?

Trả lời

8

Mặc dù không rõ ràng là on MSDN, nhưng không phức tạp lắm. Có một bộ ba lớp học:

  • Tư cách thành viên: cung cấp phương thức tiện ích và điểm nhập - về cơ bản là Singleton (lớp tĩnh).
  • MembershipProvider: hoạt động như một người truy cập dữ liệu và nhà máy cho các đối tượng MembershipUser.
  • MembershipUser: đại diện cho một người dùng cá nhân.

Tùy chọn MembershipProvider được chọn (theo mã trong Tư cách thành viên) dựa trên cấu hình ứng dụng của bạn: configuration/system.web/membership. Đây là nơi bạn đưa nhà cung cấp của bạn vào chơi. Việc triển khai MembershipProvider của bạn phải được viết để truy cập vào bất kỳ lưu trữ dữ liệu nào bạn thích cho người dùng: bảng User của bạn trong trường hợp này.

Tư cách thành viênNgười dùng chỉ được tạo thông qua MembershipProvider của bạn. Phương thức MembershipProvider.ValidateUser() nên kiểm tra đối với lưu trữ dữ liệu của bạn mà kết hợp người dùng/mật khẩu hợp lệ. MembershipProvider.GetUser() truy xuất thông tin người dùng - sử dụng nó trong một trang được bảo vệ truy cập và chuyển vào System.Web.HttpContext.Current.User.Identity.Name là người dùng được xác thực hiện tại.

Điều này nói rằng, tôi hy vọng bạn chắc chắn bạn không muốn use Profiles và thực sự muốn có một bảng Người dùng riêng biệt. Nếu bạn đang viết một ứng dụng nội bộ, sử dụng một kho lưu trữ dữ liệu hiện tại là Active Directory hoặc LDAP sẽ giảm chi phí quản trị và có thể là rủi ro bảo mật. Có hàng trăm điều bạn có thể dễ dàng làm sai khi đi tuyến MembershipProvider. Bạn có sử dụng salted hashes không? Làm cách nào bạn bảo vệ bảng Người dùng chống lại thao tác? MSDN chỉ bao gồm một phần của số security issues mà bạn có thể phải đối mặt.

+0

Cảm ơn, điều này giúp ích rất nhiều. bây giờ tôi hiểu rồi. Đó là dễ dàng hơn nó có vẻ là. Cảm ơn rất nhiều. –

1

Nhà cung cấp cụ thể được sử dụng được kiểm soát trên web.config. Bạn thực sự có thể đặt nhiều hơn 1 nhà cung cấp và có một nhà cung cấp mặc định. Kiểm tra: http://msdn.microsoft.com/en-us/library/6e9y4s5t.aspx.

Khi được gọi như vậy, tư cách thành viên chỉ sử dụng nhà cung cấp mặc định. Bạn sẽ kế thừa MembershipUser, nếu bạn muốn cung cấp thêm thông tin cho người dùng, nhưng điều đó sẽ buộc phần còn lại của mã của bạn vào nhà cung cấp cụ thể của bạn.

Các vấn đề liên quan