用户使用设计更新后的几个重定向
Several redirects after user update with devise
我正在尝试创建一个 rails 5 应用程序,其设计应该像社交网络一样运行,因此每个用户都有一个个人资料。
更新用户而不是返回配置文件后,服务器重定向到本地主机,然后出现一条消息 Filter chain halted as :require_no_authentication rendered or redirected
,然后才加载用户配置文件。
此外,在配置文件上显示一条消息 "You are already signed in"。
我的目标是删除这些重定向。
- 我尝试更改自定义
RegistrationController
中的重定向,但后来它说重定向太多,所以我不能直接替换它。
- 我尝试在
routes.rb
中为经过身份验证的用户和未经过身份验证的用户设置不同的根目录,但这并没有改变行为
- 我试图落后于
:require no authentication
但实际上我不太确定我是否理解正确并且它没有改变任何东西。
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)
还有为什么更新后用户又登录了?这是正确的行为吗?
我似乎无法理解重定向到 localhost ist 发生和干预的位置。任何帮助将不胜感激。
编辑 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
没有改变。我想在更新方法或其他地方说 "after updating go to user profile".
你的 root_path
好像是 /users/sign_in
,当用户更新他的帐户时,你将他重定向到 root...但是用户已经登录所以他不能访问new_user_session_pah
。 Devise 中配置的回退默认位置是用户的配置文件,因此他被重定向到此路由。
您是否配置了经过身份验证的根?
https://github.com/plataformatec/devise/wiki/How-To:-Define-a-different-root-route-for-logged-in-out-users
它应该可以解决您的问题 (:
我设法通过向 RegistrationController
添加方法来解决它,如下所示:
def after_update_path_for(resource)
user_path(current_user)
end
即更新用户后,Rails转到root_path,即sessions#new
。但是用户已经登录,所以 rails 路由器将您重定向到 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
我正在尝试创建一个 rails 5 应用程序,其设计应该像社交网络一样运行,因此每个用户都有一个个人资料。
更新用户而不是返回配置文件后,服务器重定向到本地主机,然后出现一条消息 Filter chain halted as :require_no_authentication rendered or redirected
,然后才加载用户配置文件。
此外,在配置文件上显示一条消息 "You are already signed in"。
我的目标是删除这些重定向。
- 我尝试更改自定义
RegistrationController
中的重定向,但后来它说重定向太多,所以我不能直接替换它。 - 我尝试在
routes.rb
中为经过身份验证的用户和未经过身份验证的用户设置不同的根目录,但这并没有改变行为 - 我试图落后于
:require no authentication
但实际上我不太确定我是否理解正确并且它没有改变任何东西。 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)
还有为什么更新后用户又登录了?这是正确的行为吗? 我似乎无法理解重定向到 localhost ist 发生和干预的位置。任何帮助将不胜感激。
编辑 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
没有改变。我想在更新方法或其他地方说 "after updating go to user profile".
你的 root_path
好像是 /users/sign_in
,当用户更新他的帐户时,你将他重定向到 root...但是用户已经登录所以他不能访问new_user_session_pah
。 Devise 中配置的回退默认位置是用户的配置文件,因此他被重定向到此路由。
您是否配置了经过身份验证的根? https://github.com/plataformatec/devise/wiki/How-To:-Define-a-different-root-route-for-logged-in-out-users
它应该可以解决您的问题 (:
我设法通过向 RegistrationController
添加方法来解决它,如下所示:
def after_update_path_for(resource)
user_path(current_user)
end
即更新用户后,Rails转到root_path,即sessions#new
。但是用户已经登录,所以 rails 路由器将您重定向到 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