繁体   English   中英

带有Devise on Rails 3的注销链接

[英]Logout link with Devise on Rails 3

我是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发送请求。 有人建议我在我尝试过的布局中使用<%= javascript_include_tag :defaults %> ,并且在defaults.js上仅使用404,如下所示:

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

有谁能解释一下这里发生的事情以及解决此问题的必要步骤? 我知道我可以告诉Devise使用GET登出,但这只是在避免问题。

本地不支持来自超链接的非GET请求,因此您需要使用JavaScript代码。 这就是jquery-ujs的功能(其中包括其他功能),但是您在清理资产时可能已将其删除。

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

另一种选择是使用button_to助手。 它使用名称为_method的隐藏输入创建表单,并将其删除为值。 它将使用POST,但是rails能够解释_method字段并找到正确的路线,从而使Devise注销可以工作。

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

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM