Trả lời

4

Không chắc liệu tôi có hiểu câu hỏi của bạn ở đây hay không nhưng tôi tin rằng giả định của bạn không chính xác.

MembershipUser được System.Web.Security sử dụng để xác thực người dùng thông qua MembershipProvider mà bạn đã đặt trong cấu hình web của bạn. Khi bạn gọi ...

MembershipUser user = Membership.GetUser(username); 

nhà cung cấp thành viên của bạn sẽ truy vấn các kho dữ liệu, nơi bạn giữ cho thông tin của bạn sử dụng (A Cơ sở dữ liệu SQL, Active Directory, vv ..) và trở về dữ liệu Memberhsip sotred cho tên người dùng đó.

Nếu bạn đã xác định một lớp khác trong ứng dụng thực hiện giao diện IPrincipal và bạn đã khởi tạo đối tượng thuộc loại đó, điều đó không nhất thiết có nghĩa là đối tượng MembershipUser và dữ liệu chia sẻ đối tượng tùy chỉnh của bạn (trừ khóa học bạn đã gán) tài liệu tham khảo programatically)

có lẽ nếu bạn cung cấp một ví dụ mã nó sẽ giúp làm rõ

+1

tôi hiểu rằng nếu bạn tự tạo đối tượng chính (đối tượng mà thực hiện giao diện IPrincipal) mà bạn cũng phải programmaticaly tạo ra một tài liệu tham khảo giữa hai các đối tượng. Nhưng trong câu hỏi ban đầu của tôi tôi đã đề cập (xin lỗi vì không cụ thể hơn) đối tượng chính đại diện cho bối cảnh bảo mật của người dùng hiện tại và được tạo ra tự động bởi Asp.Net khi sử dụng xác thực biểu mẫu. Tôi nghĩ rằng trong trường hợp đó Asp.Net cũng chăm sóc "đồng bộ hóa" hai đối tượng? – SourceC

+1

Tôi vẫn không hiểu những gì bạn muốn được "đồng bộ" giữa hai đối tượng? Họ không thực sự chia sẻ bất cứ điều gì - việc thực hiện IPrincipal chứa một IIdentity - nhưng đó là về nó .... –

+3

IPrincipal trong ngữ cảnh của Asp.net (HttpContext.User) là người dùng đang chạy tiến trình hiện tại trên máy. MembershipUser là một người dùng ứng dụng mà bạn lưu trữ ở đâu đó trong kho dữ liệu. Trong quá trình ủy quyền, bạn có thể đặt HttpContext.User bằng cách gán các giá trị từ bạn MembershipUser vào vé FormsAuthentication, nhưng hai đối tượng mà bạn đang đề cập sẽ không bao giờ được đồng bộ tự động. –

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