在XHR响应中发送cookie,但未存储它吗?

我正在尝试通过我正在编写的API的响应传递HttpOnly cookie。目的是为了使Cookie像刷新令牌一样,目的是silent refresh用于React中的SPA。

在我的控制器方法中,我有以下代码:

response.set_cookie(
  :foo,{
    value: 'testing',expires: 7.days.from_now,path: '/api/v1/auth',secure: true,httponly: true
  }
)

我正在使用fetch这样的命令对此操作进行发布请求:

fetch("http://localhost:3001/api/v1/auth",{
  method: 'POST',headers: {
    'Content-Type': 'application/json'
  },body: JSON.stringify({
    email: 'aaron@example.com',password: '123456',})
})

不确定这是否重要,但我想知道在XHR响应中传递cookie是否无效?但是,正如您在我的回复中看到的那样,这似乎正在起作用:

Set-Cookie: foo=testing; path=/api/v1/auth; expires=Sun,26 Jan 2020 05:15:30 GMT; secure; HttpOnly

此外,在Network下的Cookies标签中,我得到了:

在XHR响应中发送cookie,但未存储它吗?

但是,我没有在Application -> Cookies下设置cookie:

在XHR响应中发送cookie,但未存储它吗?

为澄清起见,React应用程序位于localhost:3000上,而Rails后端正在监听localhost:3001

有什么想法吗?

zjc121 回答:在XHR响应中发送cookie,但未存储它吗?

好吧,看来我需要配置我的CORS(在Rails中,这是您的Rack::CORS中间件。

我这样设置config/initializers/cors.rb文件:

Rails.application.config.middleware.insert_before 0,Rack::Cors do
  allow do
    origins 'http://localhost:3000'
    resource '*',headers: :any,methods: [:get,:post,:put,:patch,:delete,:options,:head],credentials: true
  end
end

,我的访存命令应以credentials: 'include'作为参数,看起来像这样:

return fetch(`${endPoint}`,{
    method: 'POST',credentials: 'include',headers: {
      'Content-Type': 'application/json'
    },body: JSON.stringify({
      email,password,password_confirmation: passwordConfirmation
    })
  })

添加credentials: true允许浏览器设置cookie。显然,即使发送它们,您也需要在标题中使用Access-Control-Allow-Credentials: true,浏览器才能对它们执行任何操作。

编辑:重新创建该应用程序以获取学习经验,即使添加了credentials选项,我仍然再次遇到此问题。我没有看到HttpOnly cookie存储在浏览器中。但是事实证明,它确实存在并且确实已发送。您可能可以在控制器操作中对此进行测试。如果此解决方案似乎无法为您工作,请记住这一点!

本文链接:https://www.f2er.com/2745715.html

大家都在问