【问题标题】:Devise destroy_user_session not working设计 destroy_user_session 不工作
【发布时间】:2015-12-22 03:15:17
【问题描述】:

我对同一个 Devise 方法有 2 次不同的调用:destroy_user_session。

工作是通过一种非常基本的方法完成的,并导致以下 HTML 代码:

<a rel="nofollow" data-method="delete" href="/users/sign_out">Logout</a>

他们我做了一个更花哨的,有更好的 UI,但仍然是相同的 Rails 应用程序(所以没有变化,只有生成的 HTML 不同):

<a class="tip" data-confirm="You are going to be disconnected" data-title="Logoff" rel="nofollow" data-method="delete" href="/users/sign_out" data-original-title="" title=""><i class="fa fa-power-off"></i></a>

虽然两者都使用相同的方法:删除以销毁当前用户会话,第二个返回 No route matches [GET] "/users/sign_out"。 p>

为 /users/sing_out 添加 GET 路由可能是一个选项,但不是干净的,因为它必须是一个 DELETE 调用。

【问题讨论】:

  • 添加到您的路线get "/users/sign_out", :to =&gt; "devise/sessions#destroy"
  • 这并不能解释为什么一个工作,为什么另一个不工作。
  • 也许是您放置它们的顺序。为什么你不使用`
  • 我正在使用 来生成它们。
  • 似乎是 JS 问题。如果没有 Rails 的不显眼的 javascript 或 jquery_ujs,data-method 属性本身就没有任何作用。所以问题是这个链接是如何进入 DOM 的?它是否被动态插入到位?如果您(或您所依赖的脚本)正在使用 jQuery .clone()、.html() 等来创建该链接,它将恢复为默认链接行为,即。 GET 请求。

标签: html ruby session ruby-on-rails-4 devise


【解决方案1】:

问题是由“rails ujs javascript”在错误页面上未正确加载造成的。

【讨论】:

    【解决方案2】:

    对于 Rails 7,您将需要使用以下内容,而不仅仅是 method: :delete

    <%= link_to "Sign Out", destroy_user_session_path, data: { "turbo-method": :delete } %>
    

    https://stackoverflow.com/a/70482989/25192

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2013-06-28
      • 2013-05-27
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多