我有 3 种不同的服务。
如果您的身份验证正确,我会在身份验证服务上设置 cookie
res.cookie('tmC', JSON.stringify(cookieObj), {
secure: process.env.NODE_ENV === 'production',
httpOnly: true,
maxAge: 4 * 60 * 60 * 1000,
})
在我的 nuxt 配置的前端
axios: {
// baseUrl: process.env.NUXT_ENV_API_URL
credentials: true,
init(axios) {
axios.defaults.withCredentials = true
},
},
在我的服务中我有这样的cors设置
app.use(cookieParser())
app.use(bodyParser.json())
const corsOptions = {
origin: 'http://localhost:3000',
credentials: true,
methods: ['GET', 'HEAD', 'PUT', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization'],
}
app.use(cors(corsOptions))
起源必须是 3000(前端,因为这是所有请求的起源地。无论我如何努力对抗这个问题,cookie 始终为空。如果我使用邮递员,我可以很好地看到 cookie。有什么想法吗?
Cookie 的范围通过域名确定,端口是域名的一部分。
因此,您无法从 localhost:3001 设置 cookie 并在 localhost:3000 上使用它,该 cookie 将保留在 localhost:3001 上并发送到该域的所有请求,但不会发送到 localhost:3000 或 localhost:3002
您需要让所有内容都在同一域下运行,您可以使用 nginx 反向代理(每个服务都有一个位置)来实现