oauth-2.0 - Facebook 不返回用户的电子邮件

标签 oauth-2.0 asp.net-mvc-5 facebook-oauth

我正在尝试使用 Microsoft OWIN OAuth 库在现有的 ASP.NET MVC 5 应用程序中实现 Facebook 身份验证,但找不到获取用户电子邮件地址的方法。注册看起来像这样:

var options = new FacebookAuthenticationOptions
{
    AppId = "YYY",
    AppSecret = "ZZZ"
};

options.Scope.Add("public_profile");
options.Scope.Add("email");
app.UseFacebookAuthentication(options);

范围 email 被添加到选项中。

在身份验证时,在 Controller 的 ExternalLoginCallback 方法中,email 为空,代码如下:

AuthenticateResult authResult = await authenticationManager.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie);

ClaimsIdentity externalIdentity = authResult.Identity;
string email = externalIdentity.FindFirstValue(ClaimTypes.Email);

也试过了,没用:

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
var email = loginInfo.Email;

从 Facebook 返回的 Json 数据似乎不包含电子邮件地址:

{"id":"989197284440871","first_name":"Martin","gender":"male","last_name":"Stauf\u010d\u00edk","link":"https:\/\/www.facebook.com\/app_scoped_user_id\/989197284440871\/","locale":"cs_CZ","name":"Martin Stauf\u010d\u00edk","timezone":2,"updated_time":"2014-10-18T16:14:08+0000","verified":true}

是 Facebook 没有返回地址的问题还是代码中缺少某些内容?我们将不胜感激。

谢谢。

最佳答案

为了回答我自己的问题,我刚刚升级了应用程序以使用最新的组件 MVC 5.2.3 和 OWIN 3.0.1,现在身份验证工作正常。获取电子邮件地址的代码是:

[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
    var email = loginInfo.Email;

    ...
}

这是在 Visual Studio 中创建的新 ASP.NET MVC Web 项目附带的默认代码。不管是什么问题,现在都已解决。

关于oauth-2.0 - Facebook 不返回用户的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594181/

相关文章:

asp.net-core - 身份服务器 4

c# - 如何在 Asp.Net MVC 中使用属性路由为操作生成 URL

facebook - 无法从 facebook OAuth 获取所有电子邮件

c# - 向 Identity users 表添加软删除

c# - 在 asp.net MVC 中调用 AJAX 后呈现 View

javascript - Facebook JS SDK 中的 Oauth 错误

spring-mvc - 如何在 Java (Spring MVC) 中连接 Facebook、Twitter 和 Google 帐户

kubernetes - Oauth2-Proxy 不传递 X-Auth-Request-Groups header

permissions - 启用谷歌电子表格API

python - 尝试在 Python 中运行 Gmail API 快速入门的属性错误