我使用 cookies 和expressjs 编写了一个简单的身份验证程序,我的代码在 localhost 环境中运行良好,但是当部署到 Vercel 时,我的程序代码运行不佳(cookie 未发送且未在客户端浏览器上设置)
这是我的快递代码
const express = require('express');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cors(
{
origin: 'https://tester-virid-seven.vercel.app/',
credentials: true
}
));
app.use(express.json());
app.use(express.urlencoded());
app.use(cookieParser());
app.set("trust proxy", 1);
app.get('/', (req, res) => {
res.status(200).cookie("AUTH", "example", {
maxAge: 900000,
httpOnly: false,
secure: true,
expires: new Date(Date.now() + 1000*60)
}).json({cookie: req.cookies.AUTH});
});
app.listen(3000, () => {
console.info('app is running...');
});
这是客户端/前端程序代码这是客户端/前端程序代码
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Document</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
axios.defaults.withCredentials = true
axios.get('https://cookie-test-theta.vercel.app/')
.then(res => console.info(res))
.catch(err => console.error(err));
alert(document.cookie);
</script>
</body>
</html>
我希望程序代码在部署时能够正常工作(发送和设置 cookie)我希望程序代码在部署时能够正常工作(发送和设置 cookie)
从您的 Express 代码和 CORS 配置来看,您的前端正在 https://tester-virid-seven.vercel.app 上运行,并且您允许从该主机向在另一台主机上运行的 Express 应用程序发出请求。
您需要在 cookie 选项中添加
sameSite: 'None'
才能允许在两个不同的主机之间发送 cookie。请参阅https://expressjs.com/en/api.html#res.cookie
或者,您可以在同一主机上的一个应用程序中在 Vercel 上运行前端和后端。