未在浏览器中设置 Cookie

Str*_*ch0 8 javascript cookies node.js reactjs koa

我正在尝试设置一个包含我的身份验证令牌的 cookie。我可以看到它在响应标头中返回,set-cookie: xxxxxx但无论出于何种原因,浏览器都没有存储 cookie。

在我的反应前端,http://app1.dev:3001我正在进行 POST api 调用:

return axios.get(
  `${apiUrl}/info`,
  { withCredentials: true }
)
.then(res => res.data)
.catch(console.error)
Run Code Online (Sandbox Code Playgroud)

我有一个简单的 Koa 服务器运行 http://localhost:3000

const Koa = require("koa")
const Router = require("koa-router")
const bodyParser = require("koa-bodyparser")
const cors = require("@koa/cors")
const axios = require("axios")
const env = require("./env")
const KeyGrip = require("keygrip")

const app = new Koa()
const router = new Router()
const port = env("port")

const keyList = ["xxxxxxx",]
app.keys = new KeyGrip(keyList, "sha256")

router.get("/info", ctx => {
  console.log('req', ctx.req)
  ctx.cookies.set("token", "test_token", { signed: true, httpOnly: true })
  ctx.body = { ok: true }
})

const corsOptions = {
  origin: ctx => ctx.request.header.origin,
  credentials: true
}

app
  .use(cors(corsOptions))
  .use(bodyParser())
  .use(router.routes())
  .use(router.allowedMethods())

app.listen(port, () => console.info(`Listening on port ${port}`))
Run Code Online (Sandbox Code Playgroud)

我怀疑它没有被设置,因为它是跨域的。当我http://localhost:3001用于前端时,cookie 设置得很好。

为什么浏览器没有设置cookies?任何帮助将不胜感激。

Ser*_*pin 7

当您http://localhost:3001用于前端时,您的前端和后端服务器共享同一个域(即使在不同的端口上),因此您可以看到由对后端服务器的请求设置的 cookie(因此链接到后端服务器域)。

当您使用不同的域时,您无法看到 cookie,因为开发工具附加到属于另一个域的页面。但是 cookie 会被保存,并且会随后续请求一起发回。

  • @Stretch0 是的,拥有 `withCredentials: true` 可以根据常规 cookie 策略保存和持久化它们。 (3认同)