You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Async函数从Auth0获取用户邮箱并存储到常量时遭遇ReferenceError错误求助

问题分析与解决方案

首先,你遇到的ReferenceError: document is not defined错误核心原因是:你在Node.js环境(后端)中使用了Auth0的客户端SDK——这类SDK是专门为浏览器环境设计的,依赖浏览器提供的document对象,而Node.js后端根本没有这个对象,所以直接报错了。

另外,你的代码本身还有两个小问题需要修正:

  1. then回调里没有返回值,导致result会是undefined
  2. 你写的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,步骤如下:

  1. 先安装Auth0管理SDK:
npm install auth0
  1. 在Auth0控制台创建一个M2M(机器对机器)应用,获取域名、客户端ID、客户端密钥,并给这个应用分配read:users权限

  2. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:34:07