2015-10-14 14 views
0

我使用會話超時驗證碼>Rails的會話行爲和錯誤消息到期

Yourapp::Application.config.session_store :cookie_store, 
            key: 'your_session_id', 
            expire_after: 45.minutes 

它工作在這個意義上,會話變量都設置爲無,但我在會議#一些代碼銷燬操作,這是用戶註銷時發生的情況。我注意到,當會話到期時,這個動作不會被執行。

有誰知道這是爲什麼,以及如何使它發生? 另外,我怎樣才能使它重定向到「登錄頁面的會話過期」方法?

感謝

回答

0

這是發生,因爲會話到期不打任何控制器動作。

如果您想在用戶會話過期(或以其他方式註銷)時執行一些重定向,則可以創建一個before_action來處理此問題。所以,在你的控制器文件,把這個頂部的類定義後:

before_action :user_logged_in, only: [#relevant actions which need user login, eg :show ] 

在一個輔助方法,創建一個動作之前將調用方法:

def user_logged_in 
    unless user_logged_in? 
    flash[:danger] = "Please log in." 
    redirect_to login_url 
    end 
end 

而另一個輔助方法返回用戶是否正確登錄。 (你可以用上面的代碼結合這一點,但它往往整潔分開,所以你可以在其他地方使用此方法。)

def user_logged_in? 
    # some code which tests if the cookie is valid and not expired 
end 

注:爲了安全起見,最好不要單獨依靠cookie的到期時間。在這種情況下可能有意義,但通常情況下,最好將過期時間存儲在服務器上,並檢查上述方法。

希望有幫助!

+0

我已經有了,但它只是重定向,它不會調用會話#銷燬行動。我該如何在該方法中執行此操作? – Fermin

+0

您的意思是說,在用戶的Cookie過期後,您希望通過會話重定向他們#下次他們加載頁面時銷燬操作? – roc