簡體   English   中英

檢查用戶是否在Devise中超時

[英]Check if user has been timed out in Devise

由於我使用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));
} 

但是,這似乎不適用於會話超時,而僅適用於注銷。 我已經看到了幾種簡單的方法來實現此目的,但是我似乎無法直接從Devise或Warden中找到任何東西來使用或覆蓋一種方法來測試用戶是否已超時或是否已采取措施。時間到。 我正在使用Rails 5和Devise 4.2.1。

您將需要向服務器發出該操作的請求,以查看用戶是否已超時,因為設置超時時即服務器端,因此,當該時間過去時,客戶端沒有任何更改,這是唯一的方法知道是向服務器發出ajax請求,以查看會話超時user.timedout?(Time.now.utc)還是直接對操作請求進行驗證(在控制器中),用戶將始終嘗試運行該操作,但是在服務器上,您可以驗證用戶是否超時,然后不要讓他們這樣做並重定向到登錄頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM