2017-04-23 32 views
0

因爲我使用javascript來執行操作而不是控制器方法,所以我需要檢查用戶是否在該操作呈現前超時。要做到這一點,我試圖添加和刪除cookies在我application_controller.rb這樣的:檢查用戶是否已在設計中超時

Warden::Manager.after_set_user do |user,auth,opts| 
    auth.cookies[:signed_in] = 1 
end 

Warden::Manager.before_logout do |user,auth,opts| 
    auth.cookies.delete :signed_in 
end 

,在我的JavaScript文件:

myCookie = getCookie("signed_in"); 
if (myCookie == null) 
{ 
    //redirect to sign in page 
} else { 
    //perform my action 
} 

function getCookie(name) { 
    var dc = document.cookie; 
    var prefix = name + "="; 
    var begin = dc.indexOf("; " + prefix); 
    if (begin == -1) { 
    begin = dc.indexOf(prefix); 
    if (begin != 0) return null; 
    } 
    else 
    { 
    begin += 2; 
    var end = document.cookie.indexOf(";", begin); 
    if (end == -1) { 
    end = dc.length; 
    } 
    } 
    return decodeURI(dc.substring(begin + prefix.length, end)); 
} 

然而,這似乎並沒有在會話超時工作,只在註銷時使用。我已經看到了一些有趣的方法來實現這一目標,但我似乎無法直接從Devise或Warden中找到任何使用或覆蓋方法來測試用戶是否已超時或在用戶已經時間到。我在Rails 5和Devise 4.2.1上。

回答

0

您需要向服務器發出一個請求,以查看用戶是否超時,因爲當您設置超時時間時,這是服務器端,所以當這段時間過去時客戶端沒有變化,要知道的唯一方法是向服務器發出ajax請求,以查看會話超時012d或直接根據請求(在控制器中)執行驗證,用戶將始終嘗試運行該操作,但是服務器,你驗證用戶是否有超時,然後你不讓他們這樣做,並重定向到登錄頁面。