javascript - 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 服务器中实现以下中间件,以确保我对 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
希望这可以帮助任何人解决这个问题。
推荐阅读
- matlab - 无效的训练数据。X 和 Y 必须具有相同数量的观测值
- html - 在六边形网格的边缘创建渐变?
- python - 新的滚动平均值列,按一列分组并找到另一列的滚动平均值
- media-queries - 三星 Galaxy A20 视口尺寸
- react-native - 反应 InputRange 组件的问题
- java - 使用 @ConfigurationProperties 处理多个相同的属性
- typescript - 如何为具有动态属性的扩展对象创建类型
- javascript - 访问 API 以在没有管理员权限的机器上下载数据
- python - 尝试使用 python 脚本将文件上传到共享点时出现 JSONDecode 错误
- bash - 获取 ksh:NF:在执行 ssh 命令时未找到