javascript - 未在浏览器中设置 Cookie

标签 javascript node.js reactjs cookies koa

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

在我的 React 前端 http://app1.dev:3001 我正在这样调用 POST api:

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

我有一个简单的 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}`))

我怀疑它没有被设置,因为它是跨域的。当我在前端使用 http://localhost:3001 时,cookie 设置正常。

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

最佳答案

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

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

关于javascript - 未在浏览器中设置 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50369779/

相关文章:

javascript - 在reactjs中sourceMapSupport有什么用?

reactjs - 在 Firebase : New deployment not showing (old deployment cached in browser) 上 react 应用

javascript - 如何确定在 Chrome DevTools 中调用 JavaScript 文件的位置?

javascript - 如何在单击复选框时使用数据库中的值填充输入文本字段

javascript - 作为参数传递时 document.createElement 的行为是什么?

node.js - AWS Lambda SDK - TooManyRequestsException

reactjs - 如何将 AWS Elb 后面的 ReactJs SPA 的 http 重定向到 https?

javascript - 从服务器到 webapp 发送和接收 SMS

node.js - 如何更改 node.js 的控制台字体颜色?

android - React Native - 带有新项目的意外标识符 'str'