【问题标题】:Rails 5 app in production on heroku is calling sign out using method GETHeroku 上的 Rails 5 应用程序正在使用方法 GET 调用注销
【发布时间】:2017-02-09 13:05:20
【问题描述】:

我可以在开发中的本地主机上轻松退出,但我无法使用 devise 在 heroku 上退出生产模式。在查看日志后,我发现users/sign_out 正在使用 GET 方法调用。

这是heroku服务器为注销按钮生成的代码:

<a rel="nofollow" data-method="delete" href="/users/sign_out">Logout</a>

我为 GET 方法创建了一个自定义路由以退出,但这不遵循 RESTful 方法。这是我的路线文件:

Rails.application.routes.draw do
resources :posts do
  resources :post_comments
end
devise_for :users, controllers: {
    sessions: 'users/sessions',
    registrations: 'users/registrations'
}
devise_scope :user do
  get 'users/sign_out', to: 'users/sessions#destroy'
end
root 'posts#index'

结束

如何解决此问题以使用 DELETE 方法?

【问题讨论】:

  • 在检查您用于退出的页面时,您是否收到任何 javascript 错误?您的 javascript 中是否需要 jquery 和 jquery_ujs ?可能在资产编译期间出现了您无法在开发环境中处理的问题。
  • @AlexandreAngelim 我很确定唯一的错误是找不到该页面。是的,它们都在 application.js 中使用。我不确定如何修复资产编译问题,我是 Rails 新手
  • 应用是否公开?可以分享一下网址吗?
  • 缺少引导程序依赖项(Tether)。 Bootstrap 正在提高 Uncaught Error: Bootstrap tooltips require Tether。这可能会阻止 js 执行,因此无法正确处理数据方法链接。

标签: ruby-on-rails rest heroku devise


【解决方案1】:
 delete 'users/sign_out', to: 'users/sessions#destroy'

【讨论】:

  • 谢谢,但我已经试过了,但还是不行。就像我在问题中所说的那样,heroku 默认选择 GET 方法。请查看herokuat=info method=GET path="/users/sign_out" 生成的这个日志
【解决方案2】:

正如您所说,Devise 会生成一个退出链接,该链接使用 delete 方法以一种宁静的方式利用正确的 HTTP 动词,但这必须由 javascript 完成。 jquery-ujs 读取页面正文并为每个具有不同于 GET 的 data-method 属性的元素创建一个不可见的表单,捕获点击事件并使用 "_method" 属性提交该表单,以便 rails 知道将其路由到哪里。

如果有任何东西阻止 javascript 运行,则不会创建这些表单,并且这些链接会保留其自然行为,即在单击时执行 GET 请求。

当这样的事情发生时,重要的是确保jqueryjquery-ujs 正在被加载,并且在创建这些表单之前没有另一个 javascript 引发错误并停止所有 js 执行。最简单的调查方法是打开浏览器检查器并重新加载包含退出链接的页面。

【讨论】:

    【解决方案3】:

    如果有人在 2017 年的 rails 5 中仍然对此有疑问?我的解决方案

    宝石安装

    gem 'jquery-rails' 运行捆绑 然后去你的资产中的 application.js 并将其放入... //= require jquery //= require jquery_ujs 我只是把它们放在顶部推到heroku并测试,它通过了祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2023-04-03
      • 2017-01-29
      相关资源
      最近更新 更多