使用Ruby on Rails的,我想先篩選的作用,但只有當用戶登錄Ruby on Rails的:的before_filter =>:only_when_user_is_logged_in
這怎麼可能?
使用Ruby on Rails的,我想先篩選的作用,但只有當用戶登錄Ruby on Rails的:的before_filter =>:only_when_user_is_logged_in
這怎麼可能?
如果您使用的是平安認證,那只是before_filter :login_required
。如果您使用自己的身份驗證框架,則可以在application.rb中創建一個方法,如果用戶已登錄或在重定向到登錄頁面時返回true。
before_filter :only_when_user_is_logged_in, :only => :the_action
或者多個
before_filter :only_when_user_is_logged_in, :only => [:the_action, :another_action]
在另一面,你也可以提供一個:except => :this_action
選項
這是規範模式,按照Rails指南:http://guides.rubyonrails.org/action_controller_overview.html#filters – clozach 2012-12-10 04:34:50
如果你真的不想before_filter
比已登錄的用戶以外的任何人執行考慮在你的驗證過濾器中使用#skip_before_filter
。例如,如果您在檢查用戶是否在您的驗證過濾器中登錄,如果驗證失敗,只需撥打skip_before_filter :filter_for_logged_in_users_only
即可。
除此之外,您可以在執行僅限成員篩選器之前簡單測試用戶是否已登錄。例如:
def filter_for_logged_in_users_only
return true unless current_user && logged_in?
#rest of the logic
end
好東西。謝謝 – s84 2009-12-15 14:04:34
前置過濾器需要,它傳遞電流控制器實例 ,所以你可以做這樣的事情一個可選模塊:
before_filter :do_stuff, lambda { |controller| controller.logged_in? }
class LoginsController < ApplicationController
skip_before_filter :require_login, :only => [:new, :create]
end
糟糕,
, 內部控制器。也許你正在使用你自己的新發明的編輯器。 –
Rubyist
2014-01-07 10:00:17
爲什麼在這個問題上還有一個懸念。啊,現在對我來說這太小了! – s84 2011-04-07 05:22:33