猿问

为什么新的fb api 2.4在带有Identity和oauth 2的MVC 5上返回空电子邮件?

在fb将其api升级到2.4之前,所有东西都可以正常工作 (我在上一个项目中有2.3)。


今天,当我在fb开发人员上添加新应用程序时,我使用api 2.4获得了它。


问题:现在我收到来自fb(loginInfo.email = null)的空电子邮件。


我当然检查过用户电子邮件在fb个人资料上是否处于公开状态,


我越过了loginInfo对象,但没有找到其他电子邮件地址。


我用谷歌搜索,但没有找到任何答案。


请任何帮助..我有点失落..


谢谢,


我的原始代码(适用于2.3 API):


在AccountController.cs中:


//

// GET: /Account/ExternalLoginCallback

[AllowAnonymous]

public async Task<ActionResult> ExternalLoginCallback(string returnUrl)

{

    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

    if (loginInfo == null)

    {

        return RedirectToAction("Login");

    }

    //A way to get fb details about the log-in user: 

    //var firstNameClaim = loginInfo.ExternalIdentity.Claims.First(c => c.Type == "urn:facebook:first_name");  <--worked only on 2.3

    //var firstNameClaim = loginInfo.ExternalIdentity.Claims.First(c => c.Type == "urn:facebook:name"); <--works on 2.4 api


    // Sign in the user with this external login provider if the user already has a login

    var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);

    switch (result)

    {

        case SignInStatus.Success:

            return RedirectToLocal(returnUrl);

        case SignInStatus.LockedOut:

            return View("Lockout");

        case SignInStatus.RequiresVerification:

            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });

        case SignInStatus.Failure:

        default:

            // If the user does not have an account, then prompt the user to create an account

            ViewBag.ReturnUrl = returnUrl;

            ViewBag.LoginProvider = loginInfo.Login.LoginProvider;

            return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });  //<---DOESN'T WORK. loginInfo.Email IS NULL

    }

}

慕田峪7331174
浏览 461回答 3
3回答
随时随地看视频慕课网APP
我要回答