Я пытался решить эту проблему в течение нескольких дней. Я следовал инструкциям в документации Auth0.
После декодирования токена с помощью express-jwt:
export let headerJWTCheck = expressJwt({
secret: '*************************',
audience: '******************************'
});
содержимое req.user не имеет профиля и ролей, которые мне нужны для ограничений ролей в API.
Вместо этого содержимое находится в форме:
{ iss: 'https://******.eu.auth0.com/',
sub: 'google-oauth2|***********************',
aud: '********************',
exp: **************,
iat: **************}
Во внешнем интерфейсе я уже получаю необходимую мне информацию о профиле пользователя, но я не могу продвинуться дальше этого.
Я использую функцию для ограничения ролей:
export function requireRole(role: string) {
return function (req, res, next) {
console.log(req.user);
var appMetadata = req.user.profile._json.app_metadata || {};
var roles = appMetadata.roles || [];
if (roles.indexOf(role) != -1) {
next();
} else {
res.redirect('/unauthorized');
}
}
но req.user.profile всегда не определен.
В определении основного экспресс-приложения у меня есть:
app.use(cookieParser());
app.use(session({
.................
}));
configurePassport();
app.use(passport.initialize());
app.use(passport.session());