我刚刚使用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错误。
答案 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
答案 1 :(得分:0)
您无法比目前的delete
方法更安全
Rails实际上必须使用JS设置delete
,因为大多数浏览器都不支持它。你设置它的方式如下:
<%= link_to "Logout", user_session_destroy_path, method: :delete %>
虽然我明白了如何让它更安全,但我认为您应该关注如何在后端处理身份验证。发送请求只是前端问题;处理它们是Rails的领域