badrequesterror:缺少checks.state参数

hkmswyz6  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(421)

我发现,在用户成功通过身份验证后(即,发生这种情况的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会失败吗?但是第二次尝试成功了吗?这是连接节点模块中可能存在的错误吗?
还有其他人遇到过这个问题吗?有什么想法吗?谢谢您

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题