【问题标题】:URL in-browser DELETE link (rather than GET)浏览器中的 URL 删除链接(而不是 GET)
【发布时间】:2014-11-26 23:39:08
【问题描述】:

我有一个 Rails 4 应用程序,我正在使用 Devise。一切都设置正确,我只是有一个关于 URL 和链接的问题。

我的设计模型称为“客户”。当我导航到 /clients/sign_out(即我在地址栏中输入)时,我收到以下错误:

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

现在,我明白我收到此错误的原因 - 链接指向 DELETE,而不是 GET。

显然,退出的一种方法是使用此链接:

= link_to "Log Out", destroy_client_session_path, method: :delete

(也就是haml,顺便说一句)。

但是,我正在寻找一个可以在地址栏中输入的 URL,该 URL 将有效地进行 DELETE,而不是 GET 调用。这更像是一个可能性问题,而不是一个实用性问题——我希望能对此事有任何见解!

谢谢!

【问题讨论】:

    标签: ruby-on-rails url devise get routes


    【解决方案1】:

    无法在地址栏中输入 URL 并让它执行 DELETE 请求。如果你想通过访问一个url来销毁会话,可以将config/initializers/devise.rb中的Devise配置改成如下

    config.sign_out_via = :get
    

    请注意,此方法不是 RESTful,因为在更改状态时应使用 POSTDELETE

    【讨论】:

    • 感谢您的回复——您知道不能这样做的原因吗?这是安全问题吗?
    • 浏览器就是这样设计的——在地址栏中输入的任何 URI 都会执行GET 请求。您可以下载一些开发人员附加组件/扩展程序,如果您想要这样做,您可以提出POST/PUT/DELETE/PATCH 请求。在 Chrome 上,您可以使用 Postman - REST Client,效果非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2015-04-14
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多