2009-07-31 20 views
6

Tôi đang cố triển khai đăng nhập ajax phía máy khách trên Asp.Net MVC. Tôi đã từng thiết lập điều này khá tốt trên WebForms, nhưng bây giờ tôi đã chuyển sang MVC, nó cho tôi một số rắc rối.Cách triển khai Đăng nhập Ajax phía máy khách trên Asp.Net MVC (Một liên kết đến giải pháp cho Webform Asp.Net có tại đây)

Nếu bạn muốn một hướng dẫn về Client-side Ajax Đăng nhập cho Asp.Net Webforms, nó có thể được tìm thấy here - Dễ dàng, A ++

Bây giờ ... đối với một số lý do nó không làm việc cho Asp. Net MVC.

Tôi đã sử dụng cùng một hướng dẫn chính xác như đối với Biểu mẫu web, trừ khi nó thực hiện ssa.login() (tương đương: Sys.Services.AuthenticationService.login()), nó không hoạt động.

Tôi có cảnh báo trong cả hai hàm onLoginComplete() và hàm onError(). Tôi cũng có một cảnh báo trước khi ssa.login được gọi và ngay sau ...

function loginHandler() { 
    var username = $("#login_UserName").val(); 
    var password = $("#login_Password").val(); 
    var isPersistent = $("#login_RememberMe").attr("checked"); 
    var customInfo = null; 
    var redirectUrl = null; 
    // Log them in. 
    alert("try login"); 
    ssa.login(username, 
         password, 
         isPersistent, 
         customInfo, 
         redirectUrl, 
         onLoginComplete, 
         onError); 
    alert("made it here"); 
} 

Cảnh báo đầu tiên kích hoạt nhưng lần thứ hai không có nghĩa là chức năng bị lỗi.
Dưới đây là các chức năng Tôi kéo từ Asp.Net Ajax để hiển thị bạn:

function(c, b, a, h, f, d, e, g) { 
    this._invoke(this._get_path(), "Login", false, { userName: c, password: b, createPersistentCookie: a }, Function.createDelegate(this, this._onLoginComplete), Function.createDelegate(this, this._onLoginFailed), [c, b, a, h, f, d, e, g]); 
} 

Bất cứ ai có bất cứ ý tưởng về lý do tại sao nó không?

Trả lời

6

Bạn đang làm điều này phức tạp hơn mức cần thiết. Tất cả những gì bạn cần làm là gọi phương thức Tài khoản/Đăng nhập của bạn với cuộc gọi AJAX. Bạn không cần sự phức tạp của dịch vụ xác thực, mặc dù bạn có thể muốn phát hiện xem bạn đang đăng nhập thông qua AJAX và trả về JSON chứ không phải là một dạng xem.

function loginHandler() { 
    var username = $("#login_UserName").val(); 
    var password = $("#login_Password").val(); 
    var isPersistent = $("#login_RememberMe").attr("checked"); 
    var customInfo = null; 
    var redirectUrl = null; 
    // Log them in. 
    alert("try login"); 
    $.ajax({ 
     url : '<%= Url.Action("Login", "Account") %>', 
     type: 'post', 
     dataType: 'json', 
     data: { username: username, 
       password: password, 
       isPersistent: isPersistent, 
       }, 
     success: onLoginComplete, 
     error: onError 
    }); 
    alert("made it here"); // this will execute before the callback completes... 
} 
+0

Wow, tôi thậm chí không bao giờ nghĩ đến điều đó haha. Ý tưởng tuyệt vời, Cảm ơn! Làm thế nào để xác định có hay không tôi đang đăng nhập thông qua AJAX? – Matt

+0

MVC cung cấp phần mở rộng cho HttpRequestBase, HttpContext.Request.IsAjaxRequest. Nó kiểm tra xem có một tiêu đề X-HTTP-Requested-With được đặt thành XMLHTTPRequest hay không. – tvanfosson

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