【发布时间】:2022-02-21 01:51:26
【问题描述】:
我正在 heroku 上运行一个 nodejs/reactjs 应用程序。我使用 Passport 实现了谷歌登录。当人们尝试登录时,我收到“无法验证授权状态”错误。
我在这里看到NodeJS Express Session isn't being restored between routes in kubernetes 我需要设置 X-Forwarded-SSL 标头。根据问题所说,我该怎么做?
该页面上概述的解决方案还提到了 Apache,但 Heroku 没有使用 Apache 将请求转发到应用程序的 Web dyno。
有人在 Heroku 上遇到同样的问题吗?
所以奇怪的是,当我尝试登录时,它第二次成功,但第一次,我收到错误“无法验证授权状态”。
这是我的 index.js
const session = require("express-session");
app.use (
session ({
secret: "ddd",
resave: false,
saveUninitialized: true,
cookie: {
expires: 60 * 60 * 24,
secure: (app.get('env') === 'production')
}
})
);
if (app.get('env') === 'production') {
app.set('trust proxy', 1); // trust first proxy
}
【问题讨论】:
-
您好,抱歉回复晚了!请求标头可能不是问题,因为在我的问题中,会话从未持续存在,无论我尝试了多少次,我都会收到该错误。您能否验证,当您第一次登录时,正在设置一个 cookie,并且在您的会话表中创建了一个会话(确保在测试时没有 cookie)?您是否尝试过在您的 verify 函数和 serializeUser 函数中记录所有参数?
-
另外,我假设您正在谈论通过 https 访问的已部署代码,对吗?还是你在本地主机上?
-
我在安全环境中的生产环境中运行 heroku。所以是的(https)
-
我第一次登录时没有设置cookie。
-
我的 serializeUser 函数应该做什么?