【问题标题】:How to manually specify a :delete request in the URL?如何在 URL 中手动指定 :delete 请求?
【发布时间】:2016-05-22 13:59:03
【问题描述】:

情况: 我想销毁 Rails 中的当前会话,并且目前通过 devise 登录到管理模型设置。

我认为在 URL 中输入 site.io/admins/sign_out 就足够了,但这假定了 GET 请求并且不起作用。

没有路由匹配 [GET] "/admins/sign_out"

需要发出method: :delete 请求来销毁会话。

可以像site.io/admins/sign_out{action:delete}那样做吗?

更新

根据请求,这是与管理员相关的路由。

devise_for :admins

【问题讨论】:

  • 能分享一下路线吗
  • Devise 创建自己的会话并附上他们的路线。你能在你使用这个的地方添加视图吗?
  • 我的意思是,我希望能够通过在浏览器中手动输入 url 来退出。这可能吗?

标签: ruby-on-rails http


【解决方案1】:

试试这个:

<%= link_to "Sign Out", destroy_admin_session_path, :method => :delete %>

【讨论】:

    【解决方案2】:

    要退出 devise,您需要 POST 到 /admins/sign_out。我使用 rails link_to 来帮助解决这个问题。

    <%= link_to "Log Out", destroy_admin_session_path, method: :delete %>
    

    您也可以不使用 ERB 或 link_to

    <a rel="nofollow" data-method="delete" href="/admins/sign_out">Log Out</a>
    

    对于user 型号,只需将admin 替换为user

    <%= link_to "Log Out", destroy_user_session_path, method: :delete %>
    

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

    来源:https://github.com/plataformatec/devise/wiki/How-To:-Add-sign_in,-sign_out,-and-sign_up-links-to-your-layout-template

    【讨论】:

    • 我认为调用的方法是DELETE in sign_out 而不是POST
    • 这是一个带有 DELETE 方法的 HTTP POST 请求。
    【解决方案3】:

    不可以在浏览器中手动输入链接并注销,因为在浏览器中无法指定PUTPOSTDelete。如果将注销路径定义为GET方法您可以直接输入路径并将其注销,因为浏览器默认提供GET 方法。你可以像下面的邮递员一样在 Rest Client 上做到这一点

    http://localhost:3000/users/sign_out.html
    

    选择方法为DELETE

    【讨论】:

      【解决方案4】:

      如果你强行注入site.io/admins/sign_out

      它会将您发送到带有Parameters: {"id"=&gt;"sign_out"} 的控制器的显示操作。因为它假定它是一个显示动作而不是调用Delete 函数。

      所以,我认为直接从 URL 强行使用删除方法是不可能的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-23
        • 2017-01-24
        • 2018-05-05
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 2011-01-10
        相关资源
        最近更新 更多