我发现,在用户成功通过身份验证后(即,发生这种情况的url是https://website.com/callback):
BadRequestError: checks.state argument is missing:
at /var/www/app/html/node_modules/express-openid-connect/middleware/auth.js:94:29
at processTicksAndRejections (internal/process/task_queues.js:97:5)
我正在使用 express-openid-connect
v1.0.1和新的通用登录页。有趣的是,我从未在本地测试时遇到过这种情况,只有在服务器上,如果上下文有帮助的话。
更新1:另一个难题。当我得到上面的错误,然后返回到https://example.com/ 再次单击“登录”,验证和重定向工作正常,我甚至看不到通用登录屏幕。
从这一点上,我可以注销和登录到我的心的内容没有看到错误了。
更新2:我认为这可能与cookies有关,而且express服务器运行在nginx之后,所以我补充说:
app.use("trust proxy", true);
还是一样的问题:皱眉:
更新3:我现在可以看到,当我第一次验证并得到所描述的错误时,域上没有设置cookie。当我返回到登录页并再次尝试身份验证时 appSession
cookie设置并保持不变,因此,从那里开始(如前所述)登录和注销按预期工作。
更新4:我现在已经改用 express-session
还有redis。这是我用来 express-openid-connect
:
const config = {
required: false,
auth0Logout: true,
appSession: false,
handleCallback: async function (req, res, next) {
// This will store the user identity claims in the session.
req.session.userIdentity = req.openidTokens.claims();
next();
},
getUser: async function (req) {
return req.session.userIdentity;
},
baseURL:
process.env.NODE_ENV === "production"
? "https://www.example.com"
: "http://localhost:3000",
clientID: "someid",
issuerBaseURL: "https://site.eu.auth0.com",
};
然后,我为session和redis提供了以下内容:
let RedisStore = require("connect-redis")(session);
let redisClient = redis.createClient();
app.use(
session({
store: new RedisStore({ client: redisClient }),
secret: process.env.SESSION_SECRET,
saveUninitialized: false,
resave: false,
})
);
你知道为什么第一次设置cookie会失败吗?但是第二次尝试成功了吗?这是连接节点模块中可能存在的错误吗?
还有其他人遇到过这个问题吗?有什么想法吗?谢谢您
暂无答案!
目前还没有任何答案,快来回答吧!