我在我的Rails應用程序中使用Devise。我的用戶模式是可註冊的,這意味着任何人都可以訪問/users/sign_up並創建一個新帳戶。設計過濾器之前設計,防止訪問「new_user_registration_path」,除非用戶登錄
是否可以保護此路線,以便只有signed_in用戶才能創建新帳戶?
我在我的Rails應用程序中使用Devise。我的用戶模式是可註冊的,這意味着任何人都可以訪問/users/sign_up並創建一個新帳戶。設計過濾器之前設計,防止訪問「new_user_registration_path」,除非用戶登錄
是否可以保護此路線,以便只有signed_in用戶才能創建新帳戶?
用class Devise :: RegistrationsController heriting創建一個控制器。您可以添加您的過濾器後。你只需要定義該控制器像登記控制器
class RegistrationsController < Devise::RegistrationsController
before_filter :authenticate_user!
end
在你的routes.rb
devise_for :users, :controllers => { :registrations => 'registrations'}
因爲authenticate_user!
是沒有得到所謂的它並沒有爲我工作。
我固定它的方式:
class RegistrationsController < Devise::RegistrationsController
before_filter :prevent_sign_up
private
def prevent_sign_up
redirect_to new_user_session_path and return
end
end
這裏有一個很好的觀點,通常一個標準的Rails應用程序不會爲每個動作都使用Devise,所以你的解決方案非常有效。這對我來說很有用。 – Puce 2014-03-02 23:54:04
感謝這就是我一直在尋找 – stephenmurdoch 2010-11-18 09:01:05
它不工作了...... – nverinaud 2012-07-04 13:43:41
@nverinaud我知道它已經一年多了,因爲你的評論,但只是作爲提醒,你可以通過使用'authenticate_scope!'來代替。 – 2013-09-21 14:29:46