繁体   English   中英

Passport.Js 无法从客户端获取某些浏览器的会话 - 在 localhost 上完美运行,但在部署时无法正常工作

[英]Passport.Js not able to get session from client for some browsers - works perfectly on localhost but not when deployed

嘿哟,这个问题让我发疯。

我有一个问题,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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM