【问题标题】:Logout link with Devise on Rails 3使用 Devise on Rails 3 的注销链接
【发布时间】:2014-02-22 01:36:18
【问题描述】:

我是 Rails 的新手,到目前为止还不错,目前我正在尝试使用 Devise 实现用户身份验证。一切正常,除了注销。我已经在我的标题中创建了注销链接,如下所示:

<%= link_to 'Sign out', destroy_user_session_path, :method => :delete %>

app/config/initializers/devise.rb 的文件有以下设置:

config.sign_out_via = :delete

据我所知,由于 Devise 使用 HTTP DELETE 请求注销,我需要专门将注销链接设置为 DELETE。但是,当单击链接时,请求仍然通过GET 发送,因为我收到此错误:

No route matches [GET] "/users/sign_out"

从 Google 看来,这是因为我需要与 Rails 捆绑在一起的 jQuery 版本来为 HTTP DELETE 方法实现一种 polyfill。但是,当我清理所有资产时,我选择使用最新版本的 jQuery,因此,这在我的 application.js 文件中:

//= require jquery-2.1.0
//= require bootstrap
//= require plupload.full.min

即使包含 jQuery,它仍然通过GET 发送请求。有人建议我在我尝试过的布局中使用&lt;%= javascript_include_tag :defaults %&gt;,而defaults.js 上只有404,就像这样:

No route matches [GET] "/javascripts/defaults.js"

有没有人能解释一下这里发生了什么以及解决这个问题的必要步骤?我知道我可以告诉 Devise 使用 GET 退出,但这只是在避免问题。

【问题讨论】:

    标签: jquery ruby-on-rails ruby ruby-on-rails-3 devise


    【解决方案1】:

    本机不支持来自超链接的非 GET 请求,因此您需要 javascript 代码来执行此操作。这就是 jquery-ujs 所做的(除其他外),但您可能在清理资产时将其删除。

    您可以包含 jquery-ujs 脚本,但根据文档,它与 jQuery 2.0 或更高版本不兼容。因此,如果您想继续使用最新的 jQuery 版本,这不是一个选择。

    其他选项是使用button_to 助手。它创建一个带有隐藏输入的表单,名称为 _methoddelete 作为值。它将使用 POST,但 rails 能够解释 _method 字段并找到正确的路线,从而使 Devise 注销工作。

    <%= button_to 'Sign out', destroy_user_session_path, method: :delete %>
    

    希望对你有帮助。

    【讨论】:

    • 谢谢,用button_to 方法解决了我的问题:)
    猜你喜欢
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2017-01-15
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多