0

我已经尝试解决这个问题好几天了。我按照 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());
4

2 回答 2

1

该库正在根据请求中包含的令牌内容进行express-jwt初始化。req.user

如果您需要该req.user级别的信息,您要么需要直接在令牌中包含该信息,req.user要么在运行角色检查之前进行丰富。例如,您可以req.user通过运行基于sub声明(用户标识符)获取角色的附加代码来丰富内容。

于 2017-01-31T13:23:48.250 回答
0

解决方案是在 auth0-lock 配置中添加以下代码:

auth: {
    params: {
        scope: 'openid app_metadata roles'
    }
}

在解码令牌后将app_metadata 和角色数组添加到req.user 。

于 2017-02-01T19:49:35.813 回答