Facebook Graph API v11.0登录无法获取用户邮箱问题求助
问题原因
你无法获取用户邮箱的核心原因是OAuth授权请求未声明需要email权限,即Facebook登录跳转的链接中缺少scope参数,用户授权时不会弹出邮箱权限申请提示,自然无法获取对应字段。
修复步骤
1. 修正登录跳转的OAuth请求参数
在btnFBSignIn_Click方法的OAuth链接中新增scope参数,明确申请email和public_profile权限,修改后代码如下:
Protected Sub btnFBSignIn_Click(sender As Object, e As EventArgs) Handles btnFBSignIn.Click Dim fbAppId As String = "AppID" Dim fbUrllRedirect = "https://mywebsite.com/Login" ' 新增scope参数,声明需要的权限 Dim fbApiUrl As String = "https://www.facebook.com/v11.0/dialog/oauth/?client_id=" & fbAppId & "&redirect_uri=" & fbUrllRedirect & "&response_type=code&state=1&scope=email,public_profile" Response.Redirect(fbApiUrl) End Sub
2. 优化access_token解析逻辑(可选但推荐)
你当前通过字符串分割提取access_token的方式兼容性较差,Facebook OAuth接口返回的access_token响应为标准JSON格式,建议使用JavaScriptSerializer解析获取token,避免版本更新后解析失败:
' 原access_token解析部分替换为以下逻辑 Dim str As System.IO.StreamReader = New System.IO.StreamReader(at.GetResponse().GetResponseStream()) Dim tokenJson As String = str.ReadToEnd() Dim tokenObj As Object = New JavaScriptSerializer().Deserialize(Of Object)(tokenJson) Dim accessToken As String = tokenObj("access_token").ToString()
3. 其他排查点
- 确认你使用的测试Facebook账号已绑定并验证了有效邮箱,未验证邮箱、仅用手机号注册的账号会返回空email字段
- 若App Review的email权限仍在审核中,仅你在Facebook后台配置的测试用户可以返回邮箱,正式用户暂无法获取
- 确认
FacebookUserData类中email字段的命名和JSON返回字段完全一致,不存在大小写或者拼写错误
内容的提问来源于stack exchange,提问作者JuniorDev
相关产品推荐
相关产品推荐

