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上。