Rails 6 上没有路线匹配 [DELETE]“/users/sign_out”
No route matches [DELETE] "/users/sign_out" on Rails 6
我今天刚刚发现这个问题,因为我正在审查我的所有项目和我发现的所有其他帖子似乎与 Rails 的早期版本有关,或者有我研究过的解决方案。
我正在尝试注销我的用户,但出现此错误 No route matches [DELETE] "/users/sign_out"
。
这是我的 link,
<%= link_to "Sign Out", destroy_user_session_path, method: :delete, :class => 'navbar-link' %>
我的路线,我也在使用 omniauth 与第三方登录。
devise_for :users, :controllers => { :omniauth_callbacks => "callbacks" }
这就是我在 devise.rb
中的内容
config.sign_out_via = :get
浏览器的控制台日志给我这个错误:
POST http://localhost:3000/users/sign_out 404 (Not Found)
Rails 日志向我显示:
Started DELETE "/users/sign_out" for ::1 at 2022-03-06 11:07:46 -0600
ActionController::RoutingError (No route matches [DELETE] "/users/sign_out"):
还有什么我需要检查的吗?请指教
将 config.sign_out_via = :get
更改为 config.sign_out_via = [:get, :delete]
解决了问题。
请参考评论(再次感谢max)。我的建议是在执行 config.sign_out_via = :get
之前检查 Rails UJS,这可能是一个解决方案。它会回来咬你(就像它刚刚对我所做的那样)。也许,检查是否有新的 Rails UJS 版本或者资产清单中是否缺少它可能会更好。
我今天刚刚发现这个问题,因为我正在审查我的所有项目和我发现的所有其他帖子似乎与 Rails 的早期版本有关,或者有我研究过的解决方案。
我正在尝试注销我的用户,但出现此错误 No route matches [DELETE] "/users/sign_out"
。
这是我的 link,
<%= link_to "Sign Out", destroy_user_session_path, method: :delete, :class => 'navbar-link' %>
我的路线,我也在使用 omniauth 与第三方登录。
devise_for :users, :controllers => { :omniauth_callbacks => "callbacks" }
这就是我在 devise.rb
config.sign_out_via = :get
浏览器的控制台日志给我这个错误:
POST http://localhost:3000/users/sign_out 404 (Not Found)
Rails 日志向我显示:
Started DELETE "/users/sign_out" for ::1 at 2022-03-06 11:07:46 -0600
ActionController::RoutingError (No route matches [DELETE] "/users/sign_out"):
还有什么我需要检查的吗?请指教
将 config.sign_out_via = :get
更改为 config.sign_out_via = [:get, :delete]
解决了问题。
请参考评论(再次感谢max)。我的建议是在执行 config.sign_out_via = :get
之前检查 Rails UJS,这可能是一个解决方案。它会回来咬你(就像它刚刚对我所做的那样)。也许,检查是否有新的 Rails UJS 版本或者资产清单中是否缺少它可能会更好。