微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Passport.Js无法从某些浏览器的客户端获取会话-可以在localhost上完美运行,但在部署时则不能

如何解决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 举报,一经查实,本站将立刻删除。