使用Async函数从Auth0获取用户邮箱并存储到常量时遭遇ReferenceError错误求助
问题分析与解决方案
首先,你遇到的ReferenceError: document is not defined错误核心原因是:你在Node.js环境(后端)中使用了Auth0的客户端SDK——这类SDK是专门为浏览器环境设计的,依赖浏览器提供的document对象,而Node.js后端根本没有这个对象,所以直接报错了。
另外,你的代码本身还有两个小问题需要修正:
then回调里没有返回值,导致result会是undefined- 你写的
user.mail是笔误,Auth0返回的用户邮箱字段是user.email
下面分两种场景给你解决办法:
场景1:在前端(浏览器)中获取用户邮箱
如果你的代码本来就应该跑在浏览器里,先修正代码逻辑,同时确保代码在浏览器环境执行(不要用Node.js直接运行):
const userMailInfo = async () => { // 用const声明变量,避免污染全局作用域 const auth0Client = await auth.createClient(); // 直接await代替then,代码更简洁易读 const user = await auth0Client.getUser(); console.log('mail', user.email); // 返回正确的邮箱字段 return user.email; } // 加上try/catch捕获可能的错误,避免未处理的Promise拒绝 ;(async () => { try { const userEmail = await userMailInfo() console.log('获取到的用户邮箱:', userEmail) } catch (error) { console.error('获取邮箱失败:', error) } })()
场景2:在后端(Node.js)中获取用户邮箱
如果你的需求是在Node.js后端获取用户邮箱,不能用客户端SDK,得用Auth0的管理API/后端SDK,步骤如下:
- 先安装Auth0管理SDK:
npm install auth0
在Auth0控制台创建一个M2M(机器对机器)应用,获取
域名、客户端ID、客户端密钥,并给这个应用分配read:users权限使用SDK调用API获取用户邮箱:
const { ManagementClient } = require('auth0'); // 初始化管理客户端 const management = new ManagementClient({ domain: '你的Auth0域名(比如xxx.auth0.com)', clientId: '你的M2M客户端ID', clientSecret: '你的M2M客户端密钥', scope: 'read:users', }); // 根据用户ID获取邮箱 const getUserEmail = async (userId) => { try { const user = await management.users.get({ id: userId }); console.log('用户邮箱:', user.email); return user.email; } catch (err) { console.error('获取用户信息失败:', err); } }; // 调用示例,替换成你要查询的用户ID getUserEmail('auth0|123456789abcdef');
内容的提问来源于stack exchange,提问作者stillday
相关产品推荐
相关产品推荐

