Я обнаружил, что время от времени (не уверен в точной частоте появления этой ошибки) после успешной аутентификации пользователя я получаю следующую ошибку (т.е. 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 первым время не выдержит? Но тогда удастся ли со второй попытки? Это возможная ошибка в модуле узла подключения?
Кто-нибудь еще сталкивался с этой проблемой? Есть идеи по разрешению? Спасибо