,因为我使用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));
}
但是,这似乎在会话超时,仅在注销上不起作用。我已经看到了几种实现这一目标的黑客方法,但是我似乎无法直接从设计或监狱长找到任何东西,以使用或覆盖一种方法来测试用户是否已超时或在用户(如果已经使用用户(采取行动时间到。我在Rails 5上设计了4.2.1。
您需要向服务器提出该操作,以查看用户是否有时间安排,因为当您设置超时,这是服务器端,因此没有更改客户端时,唯一知道的唯一方法是向服务器提出AJAX请求,以查看会话的时间安排user.timedout?(Time.now.utc)
还是直接按照操作请求(在控制器中(进行验证,用户将始终尝试尝试要运行操作,但是在服务器上,您可以验证用户是否有定时,那么您不允许他们执行此操作并重定向到登录页面。