如何解决即使服务器使用 VERCEL
我有两个 VERCEL 服务器正在运行。 一个用于服务器,第二个用于客户端。
服务器正在运行 NODE -> express -> express-sessions。
客户端正在使用 fetch api 运行 Svelte。
我的服务器正在正确设置 cookie 并发送它们,但我的浏览器没有保存 cookie。
我的 vercel.json 是:
{
"src": "/api/login","dest": "/api/index.js","headers": {
"Access-Control-Allow-Origin": "{mydomain}","Access-Control-Allow-Methods": "GET,OPTIONS,PATCH,DELETE,POST,PUT","Access-Control-Allow-Headers": "X-CSRF-Token,X-Requested-With,Accept,Accept-Version,Content-Length,Content-MD5,Content-Type,Date,X-Api-Version","Access-Control-Allow-Credentials": "true"
},"continue": true
},
快递应用是:
app.set('trust proxy',1);
app.use(cookieParser("secretcode"));
app.use(session({
secret: "secretcode",resave: true,saveUninitialized: true,cookie: {
maxAge: 60000 * 10,secure: true
},store: new MongoStore({ mongooseConnection: mongoose.connection })
}))
app.use(passport.initialize());
app.use(passport.session());
登录端点是:
const login = async (req,res,next) => {
passport.authenticate("local",(err,user,info) => {
if (err) throw err;
if (!user) {
res.status(200)
res.send("No User Exists")
} else {
req.logIn(user,(err) => {
if (err) throw err;
res.status(200)
req.session.user = user;
res.send({
"message": "Successfully logged in"
});
});
}
})(req,next)
}
客户端代码为:
async function login() {
await fetch("{mydomain}/api/login",{
method: "post",credentials: 'include',headers: {
'Content-Type': 'application/json',},body: JSON.stringify({
username: username,password: password
})
})
}
我尝试过的:
-
将 vercel.json Access-Control-Allow-Origin 更改为 *
-
添加/删除凭据:“包括”
没有任何效果。
我确实从 https 运行了所有东西,我什至只尝试了 http,但没有成功。 同样在失眠时,它也能完美地工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。