我有一个使用Devise进行身份验证的Rails应用程序。我通过通常的Rails视图进行身份验证,大多数应用程序都是使用通常的Rails ActionView页面完成的。
我的应用程序的一页包含一个React应用程序,该应用程序通过XHR使用isomorphic-fetch库来请求数据。我一直在Safari中开发它,它运行良好,但在Chrome或Firefox中,当我尝试XHR get时,我收到HTTP 401消息。
看来不同的是,我在Safari上获得了一个设置会话cookie的“Set-Cookie”响应头,而在Chrome中我不是。
这是我尝试过的:
*在我的AJAX抓取请求中添加X-CSRF-Token
*将config.http_authenticatable_on_xhr
设为true并设置config.navigational_format = [:html, :json]
这是一个新的Rails 5应用程序。我有一个类似的Rails 4应用程序,其中XHR工作正常。如何让我的XHR在这里工作?
答案 0 :(得分:5)
我让这个工作。我检查了我以前的应用程序,该应用程序使用jQuery进行AJAX调用。当我用fetch
替换jquery-ujs
时,它有效!我看到我的问题是它没有发送带有请求的会话cookie。我研究了如何使用isomorphic-fetch
执行此操作,并找到了github/fetch文档。当我像这样构建我的请求时,它可以工作:
fetch('/my_resource.json?param=someparam', {
'credentials': 'same-origin'
})
发送cookie。