2012-01-27 3 views
5

Tôi có một ứng dụng được bảo mật bằng cách đặt ra và hết thời gian chờ của phiên là 30 phút. Với tất cả mọi thứ đang hoạt động tốt cho điều hướng bình thường, nếu người dùng nhấp vào liên kết khi hết thời gian, họ sẽ được chuyển hướng trở lại màn hình đăng nhập với thông báo "Phiên của bạn đã hết hạn, vui lòng đăng nhập lại để tiếp tục".Thông báo hết thời gian của phiên trong RoR bằng cách sử dụng Devise

Tuy nhiên tôi có ajax ở nhiều nơi. Nếu phiên làm việc hết giờ và người dùng thực hiện thao tác ajax, tôi muốn có hành vi tương tự như ở trên thay vì âm thầm không thành công với lỗi 401 trong nền.

Cho đến nay tôi có mã jquery này trên mỗi trang để bắt 401s và tải lại:

$(document).ajaxError(function(e, error) { 
    switch(error.status) { 

    case 401: { 
     // unauthorised (possible timeout) 
     location.reload(); 
     break; 
    } 

Nó hoạt động khá tốt, nhưng có một vấn đề gây phiền nhiễu:

Vì hit yêu cầu ajax nghĩ ra đầu tiên , khi ứng dụng của tôi tải lại trang, tôi được chuyển hướng đến trang đăng nhập, nhưng tôi không thấy thông báo hết thời gian chờ, tôi thấy chưa được xác thực "Bạn cần đăng nhập hoặc đăng ký trước khi tiếp tục." thông điệp.

Có cách nào để đảm bảo rằng yêu cầu thứ hai đưa ra vẫn hiển thị thông báo hết thời gian chờ không?

Trả lời

2

tôi nghĩ rằng bạn cần hiển thị thư này theo cách thủ công, ví dụ: bằng cách chuyển hướng đến một url cụ thể hoặc đặt một số thông số truy vấn.

vấn đề là sau 401 yêu cầu bạn có phiên mới và khi bạn tải lại trình duyệt, yêu cầu tiếp theo sẽ trúng ứng dụng của bạn với phiên trống. đó là lý do tại sao bạn nhận được thông báo chưa được xác thực.

1

Thông điệp thời gian chờ "Phiên của bạn đã hết hạn Vui lòng đăng nhập lại để tiếp tục." Có sẵn trong xhr.responseText, vì vậy một cách tiếp cận sẽ chỉ hiển thị rằng:

$(document).ajaxError(function(e, error) { 
    switch(error.status) { 

    case 401: { 
     // unauthorised (possible timeout) 
     location.reload(); 
     alert(xhr.responseText); 
     break; 
    } 

Đối với tôi điều này dường như chảy tốt hơn: nhấp Cập nhật trên biểu mẫu Ajax, nhận thông báo rằng phiên đã hết giờ, sau đó xem "Bạn cần phải đăng nhập hoặc đăng ký trước khi tiếp tục" trong flash trên trang đăng nhập.