Auth0 授权后获取用户邮箱
Posted
技术标签:
【中文标题】Auth0 授权后获取用户邮箱【英文标题】:Auth0 get user email after authorization 【发布时间】:2022-01-23 08:26:41 【问题描述】:我有一个应用程序和一个 api,就 auth0 而言,一个静态前端和一个 expressjs 后端,在生产中都在工作。我设置了 Auth0,用户可以使用 Google 帐户登录。
我无法获取用户的电子邮件。我将尝试总结重要的代码行
const jwt = require('express-jwt');
const jwks = require('jwks-rsa');
const jwtAuthz = require('express-jwt-authz');
let jwtCheck = jwt(
secret: jwks.expressJwtSecret(
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `https://myapp-01.us.auth0.com/.well-known/jwks.json`
),
audience: `https://api.myapp.com`,
issuer: `https://myapp-01.us.auth0.com/`,
algorithms: ['RS256']
);
const checkClientScopes = jwtAuthz(['openid', 'profile', 'email'], checkAllScopes: true );
app.use('/users', jwtCheck, checkClientScopes, (req, res) =>
console.log('*** req.user *** ', req.user)
res.send( user: req.user )
)
我一直在尝试获取用户电子邮件,我安装了,然后我删除了库 express-openid-connect
。我的猜测是我错过了我丢失的一小段代码,或者我没有安装的库
【问题讨论】:
【参考方案1】:因为我使用的是express-jwt
和jwks-rsa
我能够创建一个函数来检索用户数据,但我需要添加axios
库来请求/userinfo
,之后
这是我创建的函数
const jwtUser = async (req, res, next) =>
const response = await axios.get(req.user.aud[1], headers: 'Authorization': req.headers.authorization );
req.user = response.data;
next()
;
然后我就可以获取用户数据了
app.use('/userdata', jwtCheck, jwtUser, (req, res) =>
console.log('user: ', req.user);
res.send(JSON.stringify(req.user));
)
希望它对其他人有用
【讨论】:
以上是关于Auth0 授权后获取用户邮箱的主要内容,如果未能解决你的问题,请参考以下文章