2013-03-02 7 views
6

Ứng dụng MVC4 mới đã tạo bảng UserProfile:Nhận UserId (int) trong ứng dụng MVC4 mới

UserId (int) | UserName (nvarchar)

Trong điều khiển:

string currentUser = User.Identity.Name; // returns UserName 

    var mu1 = Membership.GetUser(); // returns null 

    var mu2 = Membership.GetUser(currentUser); // returns null as well 

Tôi đọc rất nhiều bài và tất cả họ đều nói về việc Guid, mà tôi thậm chí không có trong sử dụng và thành viên bảng.

Có cách nào để lấy UserId (int) của Người dùng đã đăng nhập hiện tại không?

+0

Tại sao bạn cần id? – andri

+1

@andri, để lưu trữ quảng cáo FK trong một bảng khác. – mishap

+0

Tại sao không sử dụng tên người dùng là FK? Tên người dùng là duy nhất, phải không? – andri

Trả lời

0

mu1mu2 sẽ chứa một phiên bản MembershipUser nếu người dùng đã xác thực thành công. MembershipUser có thuộc tính ProviderUserKey thuộc loại object sẽ chứa số nhận dạng cho người dùng.

Membership.GetUser() yêu cầu MemberhipProvider được nối cho ứng dụng và để người dùng được xác thực; kể từ khi bạn nhìn thấy null được trả về, điều này sẽ gợi ý rằng một trong các điều kiện nói trên không được đáp ứng.

3

Bạn có thể nhận UserId như int với

WebSecurity.GetUserId(User.Identity.Name); 

Thông tin bổ sung: Bạn nên thêm [InitializeSimpleMembership] trên đầu trang của lớp điều khiển nếu bạn sử dụng một bộ điều khiển hơn AccountController.

12

Đảm bảo bạn thêm [InitializeSimpleMembership] vào đầu bộ điều khiển để khởi tạo thành viên đơn giản qua tệp InitializeSimpleMembershipAttribute.cs trong thư mục Filters.

Sau đó, bạn có thể truy cập vào id người dùng trong nhiều cách khác nhau:

int mu1 = (int)WebSecurity.CurrentUserId; 
int mu2 = (int)Membership.GetUser().ProviderUserKey; 
+0

InitializeSimpleMembershipAttribute của tôi nằm trong Filters \ InitializeSimpleMembershipAttribute vì vậy tôi đã thêm 'using RecreationalServicesTicketingSystem.Filters;' trên đầu bộ điều khiển của tôi nhưng int 'mu1 = (int) WebSecurity.CurrentUserId;' cho tôi 'Tên 'Websecurity' không tồn tại trong bối cảnh hiện tại. Vì vậy, tôi đã sử dụng 'bằng cách sử dụng WebMatrix.WebData;' điều này sẽ vẫn làm việc? – TykiMikk

0

Bạn có thể nhận UserId

if (Request.IsAuthenticated) 
{ 
    var membership = (SimpleMembershipProvider)Membership.Provider; 
    int idUser = membership.GetUserId(User.Identity.Name); 
}