解码令牌不提供用户个人资料
Decoding the token doesn't give user profile
几天来我一直在努力解决这个问题。
我遵循了 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 始终未定义。
在主要的 express 应用程序定义中,我有:
app.use(cookieParser());
app.use(session({
.................
}));
configurePassport();
app.use(passport.initialize());
app.use(passport.session());
express-jwt
库正在根据请求中包含的令牌内容初始化req.user
。
如果您需要 req.user
级别的信息,您需要 include that information directly on the token 或在 运行 角色检查之前对 req.user
进行充实。例如,您可以通过 运行 获取基于 sub
声明(用户标识符)的角色的附加代码来丰富 req.user
。
解决方案是在 auth0-lock 配置中添加以下代码:
auth: {
params: {
scope: 'openid app_metadata roles'
}
}
解码令牌后将 app_metadata 和角色数组添加到 req.user。
几天来我一直在努力解决这个问题。 我遵循了 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 始终未定义。
在主要的 express 应用程序定义中,我有:
app.use(cookieParser());
app.use(session({
.................
}));
configurePassport();
app.use(passport.initialize());
app.use(passport.session());
express-jwt
库正在根据请求中包含的令牌内容初始化req.user
。
如果您需要 req.user
级别的信息,您需要 include that information directly on the token 或在 运行 角色检查之前对 req.user
进行充实。例如,您可以通过 运行 获取基于 sub
声明(用户标识符)的角色的附加代码来丰富 req.user
。
解决方案是在 auth0-lock 配置中添加以下代码:
auth: {
params: {
scope: 'openid app_metadata roles'
}
}
解码令牌后将 app_metadata 和角色数组添加到 req.user。