解码令牌不会提供用户个人资料
Posted
技术标签:
【中文标题】解码令牌不会提供用户个人资料【英文标题】: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());
【问题讨论】:
【参考方案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
声明(用户标识符)获取角色。
【讨论】:
以上是关于解码令牌不会提供用户个人资料的主要内容,如果未能解决你的问题,请参考以下文章