gpt4 book ai didi

javascript - Passport.Js 无法从某些浏览器的客户端获取 session - 在本地主机上完美运行,但在部署时无法正常运行

转载 作者:行者123 更新时间:2023-12-05 02:04:19 26 4
gpt4 key购买 nike

嘿哟,这个问题快把我逼疯了。

我有一个问题,Passport.Js 似乎没有从用户那里获取回发的用户 session 。其他一切似乎都工作正常,序列化或反序列化用户都没有问题。

部署后,它似乎在 Firefox 上运行良好,但在 Chrome 上却不行。当我使用 http://localhost:PORT 在我的本地计算机上进行测试时,它可以在 Chrome 上运行,但在部署时就不能运行。

因为它在我的本地机器上运行良好,我想知道这是否可能是 https/http 问题?

有人知道问题出在哪里吗?谢谢。

中间件:

app.use(cookieParser());
app.use(expressSession({
resave: true,
saveUninitialized: true,
secret: process.env.REACT_APP_SESSION_SECRET,
}))
app.use(passport.initialize());
app.use(passport.session())
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors({
origin: "https://example.url",
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
credentials: true,
}));
app.use(express.static('public'));

服务器请求示例:

fetch(`https:example.url/sync/`, { credentials: 'include'})
.then({ // ... })

提前致谢。

最佳答案

在花了几个小时找出答案后,我发现了问题所在。发布以便其他人可以看到。

首先,肯定存在 http/https 问题。我必须在我的 Express 服务器中实现以下中间件,以确保我对 google auth 的请求通过 https 安全发送。

app.enable('trust proxy')

其次,Chrome 浏览器设置了一个 cookie,但由于缺少 cookie 的安全设置,因此没有将其发送回服务器。这是自 2020 年 2 月起所必需的。以下选项解决了此问题:

app.use(expressSession({

// .. other settings ..

cookie: {
sameSite: 'none',
secure: true
}
}))

此处概述了要求:https://blog.chromium.org/2019/10/developers-get-ready-for-new.html

希望这可以帮助任何陷入此问题的人。

关于javascript - Passport.Js 无法从某些浏览器的客户端获取 session - 在本地主机上完美运行,但在部署时无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64455899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com