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

如何通过Facebook OAuth2的Access Token获取用户public_profile信息(含邮箱)

解决Facebook登录获取邮箱及扩展用户信息的问题

你已经成功拿到了基础的access token和用户信息,但在权限配置和用户信息请求环节有两个关键问题,导致无法获取邮箱及更多public_profile相关内容,下面一步步帮你修正:

1. 精简并修正Scope权限参数

你当前的scope里包含了多个已废弃的Facebook Graph API权限(比如read_stream、publish_actions、offline_access),这些权限在v12.0及以后版本已经失效,反而会干扰正常的权限请求。你需要把scope精简为实际需要的有效权限:

  • email:用于获取用户邮箱
  • user_birthday:用于获取生日(需要用户授权,上线前需通过Facebook应用审核)
  • user_about_me:用于获取用户的"关于我"信息
  • 补充:public_profile是默认权限,无需额外声明,它包含name、头像、性别等基础信息

修正后的scope配置:

scope:"email,user_birthday,user_about_me"

2. 在Graph API请求中显式指定需要的字段

调用/me端点时,Facebook默认只返回id和name两个字段,必须显式声明你需要的字段才能获取邮箱、生日等扩展信息。你需要在请求中添加fields参数。

修改后的getFbUser函数:

const getFbUser = async (access_token, token_type) => { 
  const fbUser = await axios 
    .get( 
      `https://graph.facebook.com/me`, 
      { 
        headers: { 
          Authorization: `Bearer ${access_token}`, 
          "Content-Type": "application/json", 
        },
        params: {
          fields: "id,name,email,birthday,about" // 这里列出你需要的所有字段
        }
      } 
    ) 
    .then((res) => res.data) 
    .catch((error) => { 
      console.error(`Failed to fetch user:`, error.response.data); 
      throw new Error(error.message); 
    }); 
  console.log('fbUser',fbUser) 
  return fbUser;
};

额外注意事项

  • 邮箱获取的前提:用户的Facebook账号必须绑定了邮箱,且在授权流程中同意了email权限请求。如果用户拒绝授权或无绑定邮箱,返回结果中不会包含email字段,你的代码要做好容错处理。
  • 特殊权限审核:像user_birthday这类非基础权限,应用上线前需要提交Facebook官方审核,审核通过后才能对所有用户生效,测试阶段可以用Facebook测试账号验证功能。
  • API版本适配:确保你使用的Graph API版本(v12.0)和权限要求匹配,避免调用已废弃的接口。

内容的提问来源于stack exchange,提问作者ismail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:17:34