Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 rails:3设计注册筛选器链暂停为:要求\u无\u身份验证已呈现或重定向_Ruby On Rails 3_Redirect_Devise_Render - Fatal编程技术网

Ruby on rails 3 rails:3设计注册筛选器链暂停为:要求\u无\u身份验证已呈现或重定向

Ruby on rails 3 rails:3设计注册筛选器链暂停为:要求\u无\u身份验证已呈现或重定向,ruby-on-rails-3,redirect,devise,render,Ruby On Rails 3,Redirect,Devise,Render,我在我的网站中使用Desive,我创建了管理员名称空间,并提供了按管理员创建用户的功能。 我的路线如下 devise_for :users,:has_many => :comments, :controllers => {:sessions =>'devise/sessions',:registrations => 'devise/registrations'} do get "/login", :to => "devise/sessions#new",

我在我的网站中使用Desive,我创建了管理员名称空间,并提供了按管理员创建用户的功能。
我的路线如下

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
当我单击添加用户链接时,该链接具有
注册路径
,导致以下错误:

我的错误

 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 ]

Desive控制器上提到的线路在一般情况下是有意义的:登录用户不能注册。由于您遇到的情况是只有管理员才能创建用户,因此我建议您不要在
可注册
模块上使用Desive的控制器,而使用自己的规则编写自己的控制器。您可以根据Desive的控制器编写它,只需更改所提到的行


如果要使用它,请尝试使用
skip\u before\u filter
跳过
before\u filter
。我认为这不是最好的解决办法。我会编写自己的控制器

我在开发日志中收到以下错误

Filter chain halted as :require_no_authentication
创建了一个无休止的循环,因为应用程序中控制器.rb的设计在路径中的签名被重定向回上一页

stored_location_for(resource)

编辑密码时,Desive的gem会在用户中签名。

与您一样,我希望管理员用户能够添加新用户。但我不想弄乱Desive的可注册性,因为我实际上希望用户仍然能够注册自己。我有一些管理员用户可以添加新用户,所以我在我的用户控制器和其他视图中创建了其他方法来处理这种情况

我的附加方法没有被Deviate的prepend\u before\u filter引用:需要\u no\u身份验证,因此它们不会得到错误

我的食谱:

在app/controllers/users_controller.rb(或您使用Desive的任何对象)中: 复制新建、创建和更新方法,并将副本重命名为admin_new、admin_create和admin_update

在app/views/users中,将new.html.erb复制到admin_new.html.erb将部分更改为引用admin_表单,而不是表单:

 <%= render 'admin_form' %>
在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添加用户,用户仍然可以使用您未干扰的Desive机制创建自己的用户(注册)。

我有一个更简单的解决方案:

prepend_before_filter :require_no_authentication, only: [:cancel ]

通过删除
:new,:create
prepend\u before\u filter
中删除,它将覆盖designe源代码并解决问题。我也遇到了同样的问题,它解决了我的问题。

我还注意到,在我的应用程序中,当我创建一个用户并以该用户身份登录时,rails服务器控制台会显示上述消息,我会被重定向到rails localhost默认窗口“耶,你在rails上”


这是因为没有定义用于接收登录用户的页面。当我在一个文件夹中定义了一个欢迎页面'index.html.erb',比如说'views'文件夹下的'welcome',登录成功并且成功。您可以尝试此操作。

您确定没有登录用户吗?尝试注销(或清理域的Cookie)并查看其是否有效。是的,我以管理员身份登录,管理员可以添加用户,因此添加用户页面(注册)可以打开,并且不会重定向到localhost:3000/admin。正如我所说的,我想问题是在筛选之前预结束:需要\u否\u身份验证,:only=>[:新建,:创建,:取消]。我应该在我的助手中要求_no_身份验证方法吗?除上述内容外,我在app/controllers下创建了一个“welcome_controller.rb”文件,其中包含一个空白方法“index”,并在config/routes.rb文件中添加了“root to:‘welcome#index”。您的解决方法解决了我的一个大问题,唐·劳。谢谢一艘班轮+1.感谢succinct@antoine在哪里添加此代码??你能解释一下吗more@pawankumar有一种方法可以使用
类RegistrationController
设计注册。在该方法中,第一行将在过滤器之前声明
prepend\u:要求\u无\u身份验证,仅:[:取消]
此问题的解决方案是什么。我也面临同样的问题。
prepend_before_filter :require_no_authentication, only: [:cancel ]