Я использую 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 +' ');
});
}
});