【问题标题】:Decoding the token doesn't give user profile解码令牌不会提供用户个人资料
【发布时间】:2017-06-08 09:10:49
【问题描述】:

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

【问题讨论】:

    标签: passport.js auth0 express-jwt


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      如果您需要req.user 级别的信息,您需要include that information directly on the token 或在运行角色检查之前对req.user 进行扩充。例如,您可以通过运行附加代码来丰富 req.user,该代码根据 sub 声明(用户标识符)获取角色。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 2015-08-02
        • 2016-10-19
        • 1970-01-01
        相关资源
        最近更新 更多