获取向 Rails 服务器发出请求的 API

Posted

技术标签:

【中文标题】获取向 Rails 服务器发出请求的 API【英文标题】:Fetch API making requests to rails server 【发布时间】:2016-12-29 10:17:34 【问题描述】:

使用 fetch API 调用 Rails 服务器会导致一些使用 ajax 时不会出现的问题。

    CSRF,使用 jquery,rails gem 会自动将 CSRF 令牌放入请求中,有没有办法通过 fetch 完成类似的效果?

    会话 cookie 不会持续重新加载页面。我正在使用会话令牌来存储当前用户会话并登录,然后在应该保留会话时刷新擦除会话。

一直无法找到有关此主题的任何资源,并且我在通过 ajax 进行调用时成功使用了完全相同的代码,所以我知道问题与我切换到 fetch 相关

【问题讨论】:

【参考方案1】:

    我正在努力解决这个问题。当我弄清楚时,我会更新这个答案。但基本思想是您需要传递“X-CSRF-Token”标头。如果您使用的是 jQuery,则可以使用此代码获取 csrf 令牌:

    $('meta[name=csrf-token]').attr('content')
    

    默认情况下,fetch 不包括 cookie。您必须通过此选项:credentials: 'same-origin'。看到这个问题:Fetch API with Cookie

【讨论】:

以上是关于获取向 Rails 服务器发出请求的 API的主要内容,如果未能解决你的问题,请参考以下文章

使用Javascript请求获取向RouteXL发送x-www-form-urlencoded请求[重复]

使用过期令牌发出同时 API 请求时如何避免多个令牌刷新请求

如何向 roku 中的某些服务器发出 api 请求

如何从在不同端口上运行的本地 AngularJS 应用程序向本地 Rails 应用程序发出请求?

当表单中存在文件字段时,Rails 不发出 Ajax 请求

如何使用 Ruby on Rails 发出 HTTP 请求?