【问题标题】:Rails/Devise: XHR returns 401Rails/Devise:XHR 返回 401
【发布时间】:2016-10-12 21:39:33
【问题描述】:

我有一个使用 Devise 进行身份验证的 Rails 应用程序。我通过通常的 Rails 视图进行身份验证,并且大多数应用程序都是使用通常的 Rails ActionView 页面完成的。

我的应用程序的一个页面包含一个 React 应用程序,该应用程序通过 XHR 和 isomorphic-fetch 库请求数据。我一直在 Safari 中开发它,效果很好,但在 Chrome 或 Firefox 中,当我尝试 XHR 获取时,我会收到 HTTP 401 消息。

似乎不同之处在于,在 Safari 上我得到一个设置会话 cookie 的“Set-Cookie”响应标头,而在 Chrome 中我没有。

这是我尝试过的: * 将X-CSRF-Token 添加到我的 AJAX 获取请求中 * 将config.http_authenticatable_on_xhr设置为true并设置config.navigational_format = [:html, :json]

这是一个新的 Rails 5 应用程序。我有一个类似的 Rails 4 应用程序,XHR 可以正常工作。如何让我的 XHR 在这里工作?

【问题讨论】:

  • 您是否检查了不同浏览器的提交标头?也许缺少什么。

标签: ruby-on-rails devise


【解决方案1】:

我得到了这个工作。我检查了我以前的应用程序,它使用 jQuery 进行 AJAX 调用。当我用jquery-ujs 替换fetch 时,它起作用了!我看到我的问题是它没有随请求一起发送会话 cookie。我研究了如何使用isomorphic-fetch 执行此操作,并找到了github/fetch 文档。当我像这样构造我的请求时,它可以工作:

fetch('/my_resource.json?param=someparam', {
  'credentials': 'same-origin'
})

必须发送 cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2018-09-20
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多