【问题标题】:Redirect in an Axios DELETE request promise uses DELETE instead of GETAxios DELETE 请求中的重定向承诺使用 DELETE 而不是 GET
【发布时间】:2020-06-28 18:47:53
【问题描述】:

当原始请求是DELETE 时,我希望能够在使用GET 而不是DELETE.then 回调中使用window.location = '/'

这就是我的意思:

axios.delete('/logoff')
   .then(() => {
     window.location = '/signin';
   })

您会认为在成功的 DELETE 请求之后,要重定向到 /signin 的请求将作为 GET 执行 - 但是它作为 DELETE 执行,就好像选项是粘性的一样。

【问题讨论】:

    标签: javascript axios


    【解决方案1】:

    原来问题出在我的服务器端身份验证系统而不是客户端。

    我认为这对于任何使用 Devise for Rails 以及基于客户端 AJAX 的注销调用的人来说都不是问题。

    我的解决方案是修改设计的配置以使用GET 而不是DELETE 请求注销:

      # config/initializers/devise.rb
      ...
      # The default HTTP method used to sign out a resource. Default is :delete.
      config.sign_out_via = :get # this was changed from :delete to :get
    
    

    现在我的客户端注销调用正确重定向到登录页面,因为注销 HTTP 方法和登录 HTTP 方法都是 GET

    【讨论】:

    • 我不建议使用 GET 进行注销。这可能是由于在路由文件中覆盖了注销路由。如果您发布相关路线会有所帮助。
    • 这是设计文档中挂载路由的默认配置。这一定是设计路由本身的一个问题,这个问题可能最好在他们的 Github 上提出,而不是在这里。
    【解决方案2】:

    您应该返回状态码 303 表示您要重定向到其他页面的浏览器。

    超文本传输​​协议 (HTTP) 303 查看其他重定向状态 响应代码表明重定向不链接到新的 上传资源,但到另一个页面(例如确认页面 或上传进度页面)。此响应代码通常会被发回 作为 PUT 或 POST 的结果。用于显示此重定向的方法 页面总是 GET

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/303

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2013-01-13
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多