我在我的网站中使用Devise我创建管理员命名空间并通过管理员提供创建用户的功能 我的路线如下
devise_for :users,:has_many => :comments, :controllers => {:sessions =>'devise/sessions',:registrations => 'devise/registrations'} do
get "/login", :to => "devise/sessions#new", :as => :login
get "/signup", :to => "devise/registrations#new", :as => :signup
get "/logout", :to => "devise/sessions#destroy", :as => :logout
end
当我点击add_user链接时,signup_path
会导致以下错误:
我的错误
Started GET "/signup" for 127.0.0.1 at Fri Mar 09 12:49:11 +0530 2012
Processing by Devise::RegistrationsController#new as HTML
User Load (0.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 35 LIMIT 1
Redirected to http://localhost:3000/admin
Filter chain halted as :require_no_authentication rendered or redirected
Completed 302 Found in 3ms (ActiveRecord: 0.1ms)
我认为它会进入设计注册控制器,但由于跟随线路导致设备注册控制器出错
prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]
答案 0 :(得分:31)
在一般情况下,Devise控制器上提到的行是有意义的:登录用户无法注册。当您处于只有管理员可以创建用户的情况时,我建议您不要在Registerable
模块上使用Devise的控制器,并使用您自己的规则编写您自己的控制器。您可以根据Devise的控制器编写它,仅更改上述行。
如果您想使用它,请尝试使用before_filter
跳过skip_before_filter
。我不认为这是最好的解决方案。我会写自己的控制器。
答案 1 :(得分:8)
我在开发日志中收到以下错误。
Filter chain halted as :require_no_authentication
创建了一个无限循环,因为application_controller.rb中的devise的after_sign_in_path_for正在重定向回到上一页
stored_location_for(resource)
编辑密码时,Devise的gem会在用户中签名。
答案 2 :(得分:6)
和您一样,我希望管理员用户能够添加新用户。但我不想弄乱Devise Registerable,因为我实际上希望用户仍能够自己注册。我有一些管理员用户有权添加新用户,因此我在用户控制器中创建了其他方法,并使用其他视图来处理这种情况。
我的其他方法没有被Devise的prepend_before_filter引用:require_no_authentication,所以他们没有得到错误。
我的食谱:
在app / controllers / users_controller.rb中(或您正在使用的任何对象): 复制新的,创建和更新方法,并将副本重命名为admin_new,admin_create和admin_update。
在app / views / users中,将new.html.erb复制到admin_new.html.erb更改partial以引用admin_form而不是form:
<%= render 'admin_form' %>
然后将部分_form.html.erb复制到_admin_form.html.erb。在_admin_form.html.erb中,将form_for更改为使用其他网址:
form_for(@user, :url => '/users/admin_create')
在config / routes.rb中添加路由以指向用户控制器中的备用方法:
devise_scope :user do
...
get 'users/admin_new' => 'users#admin_new'
post 'users/admin_create' => 'users#admin_create'
end
现在,您可以通过转至/ users / admin_new在登录时添加用户,并且用户仍然可以使用您未受干扰的设计机制创建自己的用户(注册)。
答案 3 :(得分:5)
大家好,我有一个更简单的解决方案:
prepend_before_filter :require_no_authentication, only: [:cancel ]
通过从:new, :create
中删除prepend_before_filter
,它会覆盖设计源代码并解决问题。我有同样的问题,它解决了我的问题。
答案 4 :(得分:0)
我还注意到,在我的应用程序中,当我创建一个用户并以该用户身份登录时,以上消息由Rails服务器控制台显示,并且我被重定向到Rails localhost默认窗口“是的,您在Rails上”。
这是因为未定义任何页面来使用已登录的用户。当我在文件夹“ views”下的“ welcome”文件夹中定义了欢迎页面“ index.html.erb”时,登录成功并且成功了。你可以试试看。