【问题标题】:Several redirects after user update with devise用户使用设计更新后的几次重定向
【发布时间】:2019-06-04 11:11:03
【问题描述】:

我正在尝试使用应该像社交网络一样运作的设计创建一个 rails 5 应用程序,因此每个用户都有一个个人资料。 更新用户而不是返回配置文件后,服​​务器重定向到本地主机,然后有一条消息Filter chain halted as :require_no_authentication rendered or redirected,然后才加载用户配置文件。 同样在个人资料上显示一条消息“您已经登录”。 我的目标是清除这些重定向。

  1. 我尝试在自定义 RegistrationController 中更改重定向,但它说重定向太多,所以我无法替换它。
  2. 我尝试在 routes.rb 中为经过身份验证和未经身份验证的用户设置不同的根目录,但这并没有改变行为
  3. 我试图了解:require no authentication,但实际上我不太确定我是否正确理解它,它也没有改变任何东西。
  4. after_sign_in_path_for 设置为用户个人资料

这是服务器输出:

Started PUT "/users" for 127.0.0.1 at 2019-06-04 12:13:37 +0200
Processing by Users::RegistrationsController#update as HTML
  Parameters: {"email"=>"asdf@asdf.de", "password"=>"[FILTERED]", "password_confirmat
ion"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update"}
User Load (0.8ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
User Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT
 1
   (0.3ms)  BEGIN
   (0.4ms)  COMMIT
Redirected to http://localhost:3000/
Completed 302 Found in 295ms (ActiveRecord: 2.1ms)


Started GET "/" for 127.0.0.1 at 2019-06-04 12:13:37 +0200
Processing by Users::SessionsController#new as HTML
  User Load (0.7ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER
 BY `users`.`id` ASC LIMIT 1
Redirected to http://localhost:3000/users/1
Filter chain halted as :require_no_authentication rendered or redirected
Completed 302 Found in 15ms (ActiveRecord: 0.7ms)


Started GET "/users/1" for 127.0.0.1 at 2019-06-04 12:13:37 +0200
Processing by UsersController#show as HTML
  Parameters: {"id"=>"1"}
  User Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER
 BY `users`.`id` ASC LIMIT 1
  User Load (0.5ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT
 1
  Rendering users/show.html.erb within layouts/application
  Rendered users/show.html.erb within layouts/application (1.1ms)
  Rendered shared/_navbar.html.erb (0.7ms)
Completed 200 OK in 162ms (Views: 145.3ms | ActiveRecord: 1.1ms)

另外,为什么用户在更新后再次登录?这是正确的行为吗? 我似乎无法理解重定向到本地主机的发生和干预的位置。任何帮助将不胜感激。

编辑 1

所以,澄清一下。我尝试使用authenticated_root,但随后收到错误消息Couldn't find User without an ID

devise_scope :user do

authenticated :user do
    root to: 'users#show', as: :authenticated_root
  end
  root to: 'users/sessions#new'
end

我也无法将重定向从 root 更改为用户配置文件。所以RegistrationController 没有改变。我想在更新方法或其他地方说“更新后转到用户配置文件”。

【问题讨论】:

  • 所以你在用户更新后重定向到根路径?您是否确保将根路由放在路由文件的底部?您能否发布相关路线以及您可能创建的任何控制器覆盖?

标签: ruby-on-rails ruby devise ruby-on-rails-5


【解决方案1】:

您的root_path 似乎是/users/sign_in,当用户更新他的帐户时,您将他重定向到根...但是用户已经登录,因此他无法访问new_user_session_pah .在 Devise 中配置的后备默认位置是用户的配置文件,因此他被重定向到此路由。

您是否配置了经过身份验证的根? https://github.com/plataformatec/devise/wiki/How-To:-Define-a-different-root-route-for-logged-in-out-users

它应该可以解决您的问题(:

【讨论】:

    【解决方案2】:

    我设法通过向RegistrationController 添加一个方法来解决它,如下所示:

    def after_update_path_for(resource)
      user_path(current_user)
    end
    

    【讨论】:

      【解决方案3】:

      即更新用户后,Rails 进入root_path,即sessions#new。但是用户已经登录,所以 rails router 会将你重定向到users#show

      你为什么不设置root "home#index"(或类似的东西)

      Rails.application.routes.draw do
        devise_for :users
      
        authenticated :user do
          root 'secret#index', as: :authenticated_root
        end
      
        root "home#index"
      end
      

      然后,在您的application_controller.rb 中,您可以只要求用户在使用您的页面之前登录

      class ApplicationController < ActionController::Base
        protect_from_forgery with: :exception
        before_action :authenticate_user!
      end
      

      如果你想在更新后将用户重定向到users#show,你可以覆盖after_update_path_for

      class User::RegistrationsController < Devise::RegistrationsController
      
        protected
      
        def after_update_path_for(resource)
          user_path(resource)
        end
      end
      

      【讨论】:

      • 谢谢,昨天才知道after_update_path_for这个方法
      猜你喜欢
      • 2014-02-05
      • 1970-01-01
      • 2015-03-21
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 2016-10-06
      相关资源
      最近更新 更多