2012-06-29 19 views
12

Tôi có trang web này (C#/ASP.NET) với biểu mẫu mà người dùng có thể đăng ký tài khoản (đó là mẫu mặc định của VS11) và sau khi mọi thứ được điền vào và người dùng nhấp để đăng ký, nó tạo tài khoản và nhật ký trong người dùng (hoạt động tốt).Lấy CurrentUserID từ Websecurity trực tiếp sau khi đăng nhập (C#/ASP.NET)

Sau bước này, tôi muốn nhận UserID mà ông được chỉ định, nhưng nó không hoạt động. Tôi đã đặt một điểm dừng ở đó để xem các giá trị của cả hai "currentuserid" và "WebSecurity.CurrentUserId" nhưng chúng chỉ có giá trị -1. Bước tiếp theo là người dùng được chuyển hướng đến trang tiếp theo và trên trang đó các chức năng này hoạt động. Tôi nghĩ tôi có thể lấy UserID khi người dùng đã đăng nhập vào dòng đầu tiên của mã mà tôi đã cung cấp ở đây.

Vì vậy, câu hỏi của tôi là, tại sao nó không hoạt động ở đây? Tôi rất noobish với điều này, vì vậy tôi rõ ràng là thiếu một cái gì đó.

WebSecurity.Login(username, password); 
int currentuserid = WebSecurity.CurrentUserId; // This doesn't work, only returns -1 
<here I wish to update other tables but I need the user ID> 
Response.Redirect("~/Welcome.cshtml"); 

Cảm ơn!

Trả lời

19

Bạn nên sử dụng WebSecurity.GetUserId (username)

WebSecurity.Login(username, password); 
int currentuserid = WebSecurity.GetUserId(username); 
Response.Redirect("~/Welcome.cshtml"); 

Hãy xem ở đây: http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.getuserid(v=vs.99)

+0

Điều đó hoạt động tốt, cảm ơn rất nhiều! – Suedish

+0

Dường như mã này dựa vào tên người dùng để nhận userid. Nếu hai người dùng có cùng tên thì sao? –

+0

Nói chung tên người dùng * là duy nhất như id –

3

từ mdsn

Khi người dùng đăng nhập, ASP.NET đặt một thẻ xác thực trong một cookie cho phép ASP.NET biết về yêu cầu tiếp theo mà người dùng đã đăng nhập. Nếu persistCookie là sai , mã thông báo chỉ hợp lệ cho đến khi người dùng đóng trình duyệt.

Vì vậy, WebSecurity.CurrentUserId sẽ chỉ hữu ích cho các yêu cầu tiếp theo.

Bạn sẽ phải tìm cách khác để truy cập thông tin đó.

+0

Có cách nào phù hợp để làm điều đó không? –

0

hãy khôi phục kết nối WebSecurity. Thêm mã sau vào bộ điều khiển mặc định là:

 public class HomeController : Controller 
     { 
      public ActionResult Index() 
      { 
       //restore WebSecurity connection 
       if (!WebSecurity.Initialized) 
       WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 

       ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; 

       return View(); 
      } 
....... 
Các vấn đề liên quan