Heroku "returnTo" ошибка параметра строки запроса при выходе из системы с использованием Auth0 - PullRequest
0 голосов
/ 23 декабря 2019

Я использую Heroku и успешно развернут. Выйти меня действительно в тупик. В соответствии с документами, я должен передавать URL-адрес, как,

https://xxxxauth0tennantxxxx/v2/logout или https://YOUR_DOMAIN/v2/logout?returnTo=http%3A%2F%2Fwww.example.com

Когда я это сделаю, я получаю ОК обратно. Но я использую приведенный ниже код из документов Auth0, который строит URL, включая номер порта.

router.get('/logout', (req, res) => {
  req.logOut();
  let returnTo = req.protocol + '://' + req.hostname;
  const port = req.connection.localPort;
  if (port !== undefined && port !== 80 && port !== 443) {
    returnTo += ':' + port;
  }
  const logoutURL = new url.URL(
    util.format('https://%s/v2/logout', process.env.AUTH0_DOMAIN),
  );
  const searchString = querystring.stringify({
    client_id: process.env.AUTH0_CLIENT_ID,
    returnTo: returnTo,
  });
  logoutURL.search = searchString;
  res.redirect(logoutURL);
});

Однако Heroku автоматически назначает порт, поэтому каждый раз, когда я пытаюсь выйти из системы, я сталкиваюсь с ошибкой The "returnTo" querystring parameter "http://xxxxx.herokuapp.com:12345" is not defined as a valid URL in "Allowed Logout URLs".

Я пытался добавить каждый вариант разрешенного выхода из системы URL, который я могупопробуйте, но безуспешно http://localhost:8000,http://*.herokuapp.com,https://*.auth0.com/v2/logout,https://*.auth0.com/,https://xxxxxxx.auth0.com Я даже попытался установить app.set('trust proxy', 1);, как предлагают некоторые документы для Heroku.

Пожалуйста, как я могу учесть динамический порт, назначенный heroku в моем URL для выхода из системы?

Изменить: я пробовал этот вариант конечной точки тоже

И я попытался отредактировать вызов конечной точки как

    router.get('/logout', (req, res) => {
    let returnTo = req.protocol + '://' + req.hostname;
    const port = req.connection.localPort;
    if (port !== undefined && port !== 80 && port !== 443) {
    returnTo = process.env.NODE_ENV === 'production' ? `${returnTo}/` : `${returnTo}:${port}/`;
  }
    req.logout();
    if (req.session) {
      req.session.destroy(function(err) {
        if (err) {
          console.log(err);
      }
      console.log('Destroyed the user session on Auth0 endpoint');
      res.redirect(req.protocol + '://' + process.env.AUTH0_DOMAIN + '/v2/logout?client_id=' + process.env.AUTH0_CLIENT_ID + '&returnTo=' + returnTo +' ');
    });
    }
    });

1 Ответ

0 голосов
/ 23 декабря 2019

Как указывается в сообщении об ошибке, вам необходимо добавить http://xxxxx.herokuapp.com:12345 в URL разрешенного выхода из системы в настройках приложения. Замените XXXXX на имя приложения heroku, а также укажите номер порта.

...