注销不使用Heroku - 使用Devise gem和Rails 4

时间:2014-04-15 02:38:04

标签: ruby-on-rails ruby heroku ruby-on-rails-4 devise

我刚刚使用Devise进行身份验证的Rails 4应用程序初始部署到Heroku。注销在本地工作,但Heroku返回错误,#34;您正在寻找的页面不存在,"并且它不会将用户注销。

基于Heroku日志和Google / SO搜索,看起来原因是Heroku使用的是GET请求而不是DELETE - 尽管我的应用代码指定了:链接的删除方法,而Devise使用DELETE默认退出。有些文章建议Heroku使用GET,这样用户可以在没有启用JavaScript的情况下退出,但我的代码中包含JS include标记,并且在浏览器中启用了JS。 (我已经使用Chrome和Safari进行了检查。)

我找到了更改配置的说明,以便Devise使用:get而不是:delete,但我更愿意使用更安全:delete方法,如果可能的话。

感谢目前为止的想法。回答你的问题:

这是我的链接:

<%= link_to "Log out", destroy_admin_session_path, method: :delete %>

这是我在head标签中加载javascript:

  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>

控制台中没有报告JS错误。

2 个答案:

答案 0 :(得分:3)

我找到了解决方案。问题是Rails 4处理资产的方式与Rails 3不同。默认情况下,Rails 4不提供静态资产。您可以通过设置:

在config / application.rb中手动更改此设置
config.serve_static_assets = true

另一个选项(以及Heroku推荐的选项)是使用rails_12factor gem。将此添加到您的Gemfile并运行bundle install将为您进行调整,并将您的记录器设置为标准输出。它可以与Rails 3和Rails 4一起使用。

gem 'rails_12factor', group: :production

我选择使用宝石。在我运行bundle install之后,提交了更改并重新部署 - 我的注销链接工作正常,无需更改方法。在此之后,我的scss文件也被准确编译和实现。 (我之前没有对这些风格做过任何事情,所以我没有意识到这是一个问题。有趣的是如何遇到一个新问题可以帮助找到解决方案......)

以下是帮助我的资源:

https://devcenter.heroku.com/articles/rails-4-asset-pipeline

https://github.com/heroku/rails_12factor

答案 1 :(得分:0)

您无法比目前的delete方法更安全

Rails实际上必须使用JS设置delete,因为大多数浏览器都不支持它。你设置它的方式如下:

<%= link_to "Logout", user_session_destroy_path, method: :delete %>

虽然我明白了如何让它更安全,但我认为您应该关注如何在后端处理身份验证。发送请求只是前端问题;处理它们是Rails的领域