我是Rails的新手。我嘗試建立一個簡單的身份驗證系統,以application_controller我把下面幾行:Rails 3 - 驗證和:before_filter
def check_session
if session[:user]
if session[:expiry_time] < 10.minutes.ago
reset_session
flash[:warning] = 'You was logout.'
redirect_to root_url
else
session[:expiry_time] = Time.now
end
else
#... authenticate
session[:expiry_time] = Time.now
flash[:warning] = 'You was logout.'
redirect_to root_url
end
end
我的問題是在一個動作 - 這個動作我檢查,如果用戶登錄或沒有。如果用戶登錄,那麼我將渲染一個模板,如果沒有,我將渲染第二個模板。它看起來像:
<% unless session[:user].nil? %>
<%= render :template => 'template_for_login_user' %>
<% else %>
<%= render :template => 'template_for_not_login_user' %>
<% end %>
而這裏是問題 - 這並不適用於我。至少...好吧 - 如果我沒有登錄,那麼將渲染模板template_for_not_login_user,如果我是,那麼template_for_login_user。這是對的。
但是,如果我登錄,我在template_for_login_user,但我15分鐘空閒=>會話將過期=>我應該重定向到登錄窗體。但這裏是問題 - 我15分鐘空閒,我刷新此頁面,所以我仍然在動作template_for_login_user - 這是問題...
我想問你 - 你能幫忙嗎?我請,哪裏可能是一個問題?我做錯了什麼?
但是如果我將這行添加到** ApplicationController **,那麼這就意味着,在每個控制器的每個動作中都會方法** check_session **檢查用戶是否登錄,對嗎? – user984621
是的,其實這就是你想要的......我猜。但是您也可以在不同的控制器中添加skip_before_filter:check_session:only => [:index,:search等..]。在這個例子中,這會跳過你的before_filter:check_session動作:索引和搜索。這樣你就有了一個全局行爲,它總是爲登錄的用戶檢查會話。但是你可以跳過這個特別的控制器,其中一些操作不需要用戶進行認證。 – Cygnusx1
我更新了我的回覆,以便更清楚。 – Cygnusx1