【发布时间】:2017-04-23 22:45:03
【问题描述】:
因为我使用 javascript 来执行操作而不是控制器方法,所以我需要在呈现该操作之前检查用户是否已超时。为此,我尝试在 application_controller.rb 中添加和删除 cookie,如下所示:
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));
}
但是,这似乎不适用于会话超时,仅适用于注销。我已经看到了一些 hacky 方法来实现这一点,但我似乎无法直接从 Devise 或 Warden 找到任何东西来使用或覆盖一种方法来测试用户是否已超时或在用户已超时时采取行动时间到。我在 Rails 5 和 Devise 4.2.1 上。
【问题讨论】:
标签: javascript ruby-on-rails session devise timeout