sch*_*ing 6 redis node.js express auth0
我发现,每隔一段时间(不确定此错误的确切节奏),在用户成功通过身份验证后,我会收到以下错误(即发生这种情况的网址是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)
Run Code Online (Sandbox Code Playgroud)
我正在使用express-openid-connect
v1.0.1 和新的通用登录页面。有趣的是,我在本地测试时从未遇到过这种情况,只有在上下文有帮助的情况下才在服务器上遇到这种情况。
更新1:拼图的另一块。当我收到上述错误,然后返回https://example.com/并再次单击“登录”时,身份验证和重定向工作完美,甚至没有看到通用登录屏幕。
从这一点开始,我可以注销并登录到我的心目中,而不会再次看到错误。
更新 2:我认为这可能与 cookies 以及 Express 服务器在 Nginx 后面运行这一事实有关,所以我添加了:
app.use("trust proxy", true);
Run Code Online (Sandbox Code Playgroud)
还是同样的问题:皱眉:
更新 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",
};
Run Code Online (Sandbox Code Playgroud)
然后我有以下会话和 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,
})
);
Run Code Online (Sandbox Code Playgroud)
知道为什么第一次设置 cookie 会失败吗?但第二次尝试就成功了吗?这是连接节点模块中可能存在的错误吗?
还有其他人遇到过这个问题吗?关于决议有什么想法吗?谢谢
归档时间: |
|
查看次数: |
2653 次 |
最近记录: |