2012-03-12 33 views
6

Tôi sử dụng FormsAuthentication, nhưng tôi đã thêm MemberShipProvider tùy chỉnh để xác thực đối với Bảng người dùng tùy chỉnh.Thực tiễn tốt nhất để duy trì id người dùng (MVC)

Tất cả các bảng có chứa "dữ liệu người dùng" đều có cột idUser, vì vậy tôi cần duy trì id người dùng để trình bày cho người dùng dữ liệu của mình.

Trước đây tôi đã sử dụng biến phiên (ASP.NET Webform), nhưng khi tôi viết lại ứng dụng web cho MVC, tôi muốn hỏi những gì thường được coi là phương pháp tốt nhất cho việc này.

Biến phiên là vị trí tốt nhất để giữ idUser hay tôi nên thêm "Current.User.Identity" tùy chỉnh ngoài tên người dùng cũng chứa một userId công cộng ??

Hoặc tôi có nên chọn cách tiếp cận hoàn toàn khác không?

Trả lời

3

Tôi có cùng một câu hỏi khi triển khai nhà cung cấp tư cách thành viên tùy chỉnh cho MVC. Tôi đã làm hai việc. Tôi lưu trữ Id của người dùng trong trường ProviderUserKey của đối tượng MembershipUser. Xem provideruserkey. Sau đó, để trả lời câu hỏi của bạn, vâng tôi đã tạo một hiệu trưởng tùy chỉnh từ System.Web.Security.IPrincipal, mặc dù sau này tôi đã kế thừa từ System.Web.Security.RolePrincipal vì tôi muốn hỗ trợ Vai trò.

public class MyPrincipal : RolePrincipal 
{ 
    public Guid Id { get; set; } 

    public MyPrincipal(string providerName, IIdentity identity, Guid id) : base(identity) 
    { 
     Id = id; 
    } 
} 

Cập nhật: Lý do tôi không muốn sử dụng phiên trong trường hợp của tôi là vì tôi đã vô hiệu hóa nó cho các ứng dụng. Tôi đã đọc rằng khái niệm cốt lõi đằng sau MVC là tách mối quan tâm, và đó là mô hình chặt chẽ cách thức hoạt động của web, đó là không trạng thái. Mặc dù tôi không thể nhớ nơi tôi đọc mà bây giờ tôi cố gắng nhớ. Tuy nhiên tôi nhớ cũng đọc rằng nếu bạn có thể loại bỏ phiên bạn nên làm như vậy. Nó sẽ cho phép IIS phục vụ các yêu cầu đồng thời từ ứng dụng của bạn thay vì phải chờ một yêu cầu hoàn thành (và phát hành phiên của người dùng) trước khi yêu cầu tiếp theo có thể sử dụng phiên và gửi phản hồi của nó. Tác động lớn nhất trong số đó là tải nội dung trang bằng cách sử dụng Ajax.

+0

Cảm ơn bạn! Tôi đã nghĩ đến một cách tiếp cận tương tự. Mặc dù tôi đồng ý với @Mark S. ở trên, rằng điều đơn giản nhất là sử dụng đối tượng phiên. – Kman

+0

Thêm chi tiết vì sao tôi tránh phiên họp –

+0

Phiên không nhất thiết là tà ác và có thể là điều cần thiết. Thường thì tôi thấy người dùng vô hiệu hóa phiên và bắt đầu dựa quá nhiều vào các cookie tăng kích thước của mọi yêu cầu HTTP. Một cách khác để phục vụ các yêu cầu đồng thời là sử dụng bộ điều khiển không đồng bộ, điều này khá dễ dàng trong bản beta MVC4 và có thể được thực hiện với một ít công việc trong các phiên bản trước. – Mark

3

Tên người dùng của bạn có độc đáo không? Nếu vậy không cần phải duy trì UserId vì bạn chỉ có thể truy xuất tên người dùng bằng tên người dùng.

Các dự án MVC của tôi đã triển khai Tư cách thành viên giống như một ứng dụng Biểu mẫu web truyền thống. Tôi không nghĩ có bất kỳ lý do gì để xem xét hai cách khác nhau trừ khi bạn đang cố gắng xây dựng một ứng dụng kiểu REST không trạng thái. Làm thế nào bạn duy trì UserId của bạn trong các biểu mẫu web? Phiên? Sau đó sử dụng phiên trong MVC. Không có lý do gì để phát minh lại bánh xe.

Tất nhiên nếu bạn có lý do khác để thay đổi, có rất nhiều cách để lưu trữ UserId. Bạn có thể lưu trữ nó trong UserData của cookie xác thực. Bạn cũng có thể tạo vé xác thực của riêng mình sử dụng UserId làm khóa thay vì tên người dùng. Bạn thậm chí có thể tạo một Hiệu trưởng tùy chỉnh để lưu trữ một số thông tin bổ sung.

Bạn có thể muốn xem lại Forms Authentication Configuration and Advanced Topics. Bài viết này bao gồm việc lưu trữ dữ liệu bổ sung (UserId) trong vé xác thực và tạo một Hiệu trưởng tùy chỉnh. Cả hai phương pháp đều có thể phù hợp với yêu cầu của bạn.

+0

Tên người dùng là duy nhất, nhưng tôi cần nguyên nhân userId là cột nhận dạng trong mô hình (cơ sở dữ liệu) của tôi. Vì vậy, lấy dữ liệu từ một bảng tôi cần truy vấn nó với ... nơi userid = idUser. Tôi sẽ xem xét liên kết bạn cung cấp :) – Kman

+0

Phiên là cách dễ nhất và nhanh nhất để duy trì UserId của bạn. Việc sử dụng MVC chắc chắn không loại trừ việc sử dụng phiên. 2 xu của tôi, sử dụng phiên. – Mark

+0

Tôi đồng ý. Nó hoạt động tốt trong ứng dụng biểu mẫu web của tôi. Mối quan tâm chính của tôi là trong MVC cách tiếp cận đó là "lỗi thời". Cảm ơn một lần nữa!:) – Kman

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