我是Rails的新手,到目前为止还不错,目前,我正在尝试通过Devise实现用户身份验证。除了注销,一切正常。我已经建立了链接以注销标题,如下所示:
<%= link_to 'Sign out', destroy_user_session_path, :method => :delete %>
并且位于的文件app/config/initializers/devise.rb
具有以下设置:
config.sign_out_via = :delete
据我所知,由于Devise使用HTTPDELETE
请求进行登出,因此我需要将登出链接专门设置为DELETE
。但是,当单击链接时,仍然会通过发送请求GET
,因为出现此错误:
No route matches [GET] "/users/sign_out"
从Google看来,这是因为我需要与Rails捆绑在一起的jQuery版本才能为HTTPDELETE
方法实现一种polyfill 。但是,当我清理所有资产时,我选择使用最新版本的jQuery,因此,这在我的application.js
文件中:
//= require jquery-2.1.0
//= require bootstrap
//= require plupload.full.min
即使包括了jQuery,它仍然通过发送请求GET
。有人建议我<%= javascript_include_tag :defaults %>
在我尝试过的布局中使用,而404defaults.js
如下所示:
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 %>
希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句