2008-09-03 11 views
8

Chúng tôi có một tùy chỉnh MembershipProvider trong ASP.NET. Hiện có 2 trường hợp có thể người dùng có thể được xác thực:Sử dụng Custom MembershipProvider mà không có quyền kiểm soát Đăng nhập trong ASP.NET

  1. Đăng nhập người dùng qua login.aspx trang bằng cách nhập tên người dùng/mật khẩu của mình. Tôi đã sử dụng Kiểm soát đăng nhập và liên kết nó với MyMembershipProvider. Điều này làm việc hoàn toàn tốt đẹp.

  2. Mã thông báo xác thực được chuyển qua một số URL trong chuỗi truy vấn tạo thành một trang web khác. Đối với điều này tôi có một quá tải trong MembershipProvider.Validate(string authenticationToken), mà thực sự xác nhận người dùng. Trong trường hợp này, chúng tôi không thể sử dụng Điều khiển đăng nhập. Bây giờ làm cách nào tôi có thể sử dụng cùng một số MembershipProvider để xác thực người dùng mà không thực sự sử dụng điều khiển đăng nhập ? Tôi cố gắng để gọi Validate bằng tay, nhưng điều này không được ký kết hợp sử dụng trong.

Dưới đây là đoạn mã tôi đang sử dụng

if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) { 
    string ticket = Request.QueryString["authenticationToken"]; 
    MyMembershipProvider provider = Membership.Provider as MyMembershipProvider; 
    if (provider != null) { 
     if (provider.ValidateUser(ticket)) 
      // Login Success 
     else 
      // Login Fail 
    } 
} 

Trả lời

13

Sau khi xác nhận thành công, bạn cần đăng nhập người dùng , bằng cách gọi FormsAuthentication.Authenticate: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx

EDIT: Đó là FormsAuthentication.SetAuthCookie: http://msdn.microsoft.com/en-us/library/twk5762b.aspx

Ngoài ra, để chuyển hướng người dùng quay trở lại nơi anh muốn đi, hãy gọi: FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

link text

4

Bạn có thể thiết lập của riêng bạn FormsAuthenticationTicket nếu xác nhận là thành công.

Một cái gì đó như thế này;

if (provider != null) { 
    if (provider.ValidateUser(ticket)) { 
     // Login Success 
     FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
      1, //version 
      someUserName, //name 
      DateTime.Now, //issue date 
      DateTime.Now.AddMinutes(lengthOfSession), //expiration 
      false, // persistence of login 
      FormsAuthentication.FormsCookiePath 
     ); 

     //encrypt the ticket 
     string hash = FormsAuthentication.Encrypt(authTicket); 
     HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 

     Response.Cookies.Add(cookie); 
     Response.Redirect(url where you want the user to land); 
    } else { 
     // Login Fail 
    } 
} 
+0

Tôi đã cố gắng biết cách xác thực thực sự hoạt động. Cảm ơn bạn. Nó đã giúp tôi rất nhiều – Krishh

1

Bạn có quyền lưu trữ thông tin xác thực dưới dạng cookie trực tiếp. Nhưng việc sử dụng hàm băm mạnh (ví dụ: MD5 + SHA1) rất tuyệt và an toàn. Nhân tiện, nếu bạn sử dụng phiên (cũng chỉ là một cookie băm), bạn có thể đính kèm thông tin xác thực vào nó.