如何解决Passport.Js无法从某些浏览器的客户端获取会话-可以在localhost上完美运行,但在部署时则不能
嘿,这个问题使我发疯。
我遇到一个问题,其中Passport.Js似乎没有从用户发送回用户会话。其他一切似乎都可以正常工作,并且序列化或反序列化用户没有问题。
部署后,它似乎可以在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服务器中实现以下中间件,以确保通过https安全地发送对google auth的请求。
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
希望这有助于解决此问题的任何人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。