如何在auth0-react-native-sample中获取用户auth0Id?
解决Auth0 React Native获取用户auth0Id的问题
你当前的代码里,auth0.users(credentials.accessToken)并没有获取到用户信息——它只是创建了一个Auth0用户API的客户端实例,所以打印出来的是客户端配置详情,而非用户数据。要拿到用户的auth0Id(对应Auth0用户模型里的sub字段),可以用以下两种方法:
方法1:解析id_token(无需额外API请求,更高效)
因为你已经请求了openid权限,authorize方法返回的credentials中会包含id_token(JWT格式),直接解码这个token就能提取出auth0Id:
const onLogin = () => { auth0.webAuth .authorize({ scope: 'openid profile email' }) .then(credentials => { // 手动解码JWT的payload部分(正式环境建议用jwt-decode库) const idTokenPayload = JSON.parse(atob(credentials.id_token.split('.')[1])); const auth0Id = idTokenPayload.sub; // 这就是目标auth0Id console.log('Auth0用户ID:', auth0Id); console.log('用户基础信息:', idTokenPayload); Alert.alert('AccessToken: ' + credentials.accessToken); setAccessToken(credentials.accessToken); }) .catch(error => console.log(error)); };
提示:正式开发时推荐使用
jwt-decode库解码,避免手动处理的潜在风险,安装后直接调用jwtDecode(credentials.id_token)即可。
方法2:调用Auth0用户API获取完整信息
如果需要用户的完整详情(不止auth0Id),可以通过创建的用户API客户端实例调用getProfile()方法发起请求:
const onLogin = () => { auth0.webAuth .authorize({ scope: 'openid profile email' }) .then(credentials => { const userApi = auth0.users(credentials.accessToken); // 调用API获取用户完整信息 userApi.getProfile() .then(user => { const auth0Id = user.sub; console.log('Auth0用户ID:', auth0Id); console.log('完整用户信息:', user); }) .catch(apiError => console.log('用户API请求失败:', apiError)); Alert.alert('AccessToken: ' + credentials.accessToken); setAccessToken(credentials.accessToken); }) .catch(error => console.log(error)); };
这种方式需要确保你的Auth0应用已配置相应权限,允许access_token调用用户信息API。
内容的提问来源于stack exchange,提问作者J.Do
相关产品推荐
相关产品推荐

