我在我的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