asp.net-mvc – 版本弃用Facebook Graph API v2.2

我们的Facebook登录目前无效.我们收到了Facebook Developer Portal的消息:

“Name of app” currently has access to Graph API v2.2 which will reach the end of its
2-year lifetime on 27 march,2017. To ensure a smooth transition,
please migrate all calls to Graph API v2.3 or higher.

To check if your app will be affected by this upgrade you can use the
Version Upgrade Tool. This will show you which calls,if any,are
affected by this change as well as any replacement calls in newer
versions. If you do not see any calls,your app may not be affected by
this change.

You can also use our changelog to see the full list of changes in all
Graph API versions.

我们正在使用ASP.NET MVC 5,我们正在使用或认证如下:

var facebookAuthenticationoptions = new FacebookAuthenticationoptions()
            {
                AppId = "****",AppSecret = "****",AuthenticationType = "Facebook",SignInAsAuthenticationType = "ExternalCookie",Provider = new FacebookAuthenticationProvider
                {
                    OnAuthenticated = async ctx => ctx.Identity.AddClaim(new Claim(ClaimTypes.Email,ctx.User["email"].ToString()))
                }
            };

            facebookAuthenticationoptions.Scope.Add("email");

但今天,我们的登录信息对象在ExternalLoginCallback中为null:

[HttpGet]
        [AllowAnonymous]
        [RequireHttps]
        public async Task<ActionResult> ExternalLoginCallback(string returnUrl = null)
        {
            try
            {
                var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
                if (loginInfo == null)
                {
                    return RedirectToAction("Login");
                }
... more code here...

在Facebook开发. Portal我们的API版本是2.3

我们测试了很多选项,没有结果:

Access email address in the OAuth ExternalLoginCallback from Facebook v2.4 API in ASP.NET MVC 5

Why new fb api 2.4 returns null email on MVC 5 with Identity and oauth 2?

非常感谢你的帮助.

解决方法

我遇到了同样的问题,这就是我如何设法解决它并从Facebook获取电子邮件.

>按照NuGet Pacakges进行更新

> Microsoft.Owin到3.1.0-rc1版
> Microsoft.Owin.Security到3.1.0-rc1版
> Microsoft.Owin.Security.Cookies到版本3.1.0-rc1
> Microsoft.Owin.Security.OAuth到版本3.1.0-rc1
> Microsoft.Owin.Security.Facebook到3.1.0-rc1版

然后将以下代码添加到Identity Startup类

var facebookOptions = new FacebookAuthenticationoptions()
        {
            AppId = "your app id",AppSecret = "your app secret",BackchannelHttpHandler = new FacebookBackChannelHandler(),UserinformationEndpoint = "https://graph.facebook.com/v2.8/me?fields=id,name,email,first_name,last_name",Scope = { "email" }
        };

        app.UseFacebookAuthentication(facebookOptions);

这是FacebookBackChannelHandler()的定义类:

using System;
using System.Net.Http;

public class FacebookBackChannelHandler : httpclienthandler
{
    protected override async System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,System.Threading.CancellationToken cancellationToken)
    {
        // Replace the RequestUri so it's not malformed
        if (!request.RequestUri.AbsolutePath.Contains("/oauth"))
        {
            request.RequestUri = new Uri(request.RequestUri.AbsoluteUri.Replace("?access_token","&access_token"));
        }

        return await base.SendAsync(request,cancellationToken);
    }
}

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....