BadRequestError: аргумент check.state отсутствует - PullRequest
0 голосов
/ 08 мая 2020

Я обнаружил, что время от времени (не уверен в точной частоте появления этой ошибки) после успешной аутентификации пользователя я получаю следующую ошибку (т.е. 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: Еще одна часть головоломки. Когда я получаю указанную выше ошибку, а затем go возвращаюсь к https://example.com/ и снова нажимаю «Войти», аутентификация и перенаправление работают безупречно, и я даже не вижу универсального экрана входа в систему.

Отсюда точки, я могу выйти и войти в систему, сколько душе угодно, не видя ошибки снова.

Обновление 2: Думал, что это может быть связано с файлами cookie и тем фактом, что сервер Express бежит за Nginx, поэтому я добавил:

app.use("trust proxy", true);

Все та же проблема: хмурый:

Обновление 3: Теперь я вижу, что в первый раз я аутентифицироваться и получить сообщение об ошибке, как описано, что в домене не установлено значение cook ie. Как только я go вернусь на целевую страницу и снова попытаюсь аутентифицироваться, appSession cook ie будет настроен и останется неизменным, так что с этого момента (как упоминалось ранее) вход и выход работают должным образом.

Обновление 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",
};

Затем у меня есть следующее для сеанса и 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,
  })
);

Любая идея, зачем устанавливать Cook ie первым время не выдержит? Но тогда удастся ли со второй попытки? Это возможная ошибка в модуле узла подключения?

Кто-нибудь еще сталкивался с этой проблемой? Есть идеи по разрешению? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...