Pourquoi la nouvelle api fb 2.4 retourne null e-mail sur MVC 5 de l'Identité et de l'authentification oauth 2?
Tout l'habitude de travailler parfait jusqu'à ce que le fb de la mise à niveau de l'api pour 2.4 (j'ai eu 2.3 dans mon précédent projet).
Aujourd'hui, lorsque j'ajoute une nouvelle application sur fb développeurs-je l'obtenir avec l'api 2.4.
Le problème: Maintenant, je reçois null e-mail de fb (loginInfo.email = null
).
Bien sûr, j'ai vérifié que l'utilisateur e-mail est en statut public sur fb profil,
et je suis allé sur le loginInfo
objet, mais n'ai pas trouvé d'adresse email.
et j'google mais n'ai pas trouvé de réponse.
merci de toute aide.. je suis un peu perdu..
Merci,
Mon code d'origine (qui a travaillé sur 2,3 api):
Dans le 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
}
}
Dans le Démarrage.Auth.cs:
Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions fbOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
{
AppId = System.Configuration.ConfigurationManager.AppSettings.Get("FacebookAppId"),
AppSecret = System.Configuration.ConfigurationManager.AppSettings.Get("FacebookAppSecret"),
};
fbOptions.Scope.Add("email");
fbOptions.Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
foreach (var claim in context.User)
{
var claimType = string.Format("urn:facebook:{0}", claim.Key);
string claimValue = claim.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook"));
}
return System.Threading.Tasks.Task.FromResult(0);
}
};
fbOptions.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
app.UseFacebookAuthentication(fbOptions);
- Je viens de configurer un nouveau Facebook app - pourquoi c'est à dire que la version de l'API 2.11?! en 2017?!
Vous devez vous connecter pour publier un commentaire.
Prises à partir d'un Katana Fil j'ai conçu la suivante:
Changer le
FacebookAuthenticationOptions
inclureBackchannelHttpHandler
etUserInformationEndpoint
comme on le voit ci-dessous. Assurez-vous d'inclure les noms des champs que vous voulez et avez besoin pour votre application.Puis créer un personnalisé
FacebookBackChannelHandler
qui va intercepter les demandes de Facebook et de corriger l'url mal formée en tant que de besoin.Mise à JOUR: Le
FacebookBackChannelHandler
est mise à jour basé sur un 27 mars 2017 mise à jour de l'api FB.Un complément utile serait de vérifier pour la version 3.0.1 de la bibliothèque et de lever une exception si et quand elle change. De cette façon, vous saurez si quelqu'un a des mises à niveau ou mises à jour le package NuGet après un correctif de ce problème a été publié.
(Mis à jour afin de construire, de travailler en C# 5 sans nouvelles nameof fonction)
UserInformationEndpoint
? J'obtiens une erreur sur cettePour moi, ce Problème a été résolu par la mise à niveau vers
Microsoft.Owin.Security.Facebook 3.1.0
et en lui ajoutant un e-mail " à laFields
collection:Pour résoudre ce dont vous avez besoin pour installer Facebook SDK à partir de packages NuGet.
Dans Le Fichier De Démarrage
Dans le Contrôleur ou l'accompagnateur
Avec cela, vous pouvez obtenir le EmailId,Premier Nom de famille, Sexe.
Vous pouvez également ajouter votre supplémentaires, les propriétés de la chaîne de requête.
Espère que cela aidera quelqu'un.
Veux juste ajouter que sur la réponse de Mike que cette ligne
doit encore être ajouté après
Et si vous avez déjà enregistré votre facebook compte à votre site web dev sans "e-mail d'autorisation". Après avoir changé le code et essayer de nouveau, vous ne serez toujours pas reçu l'e-mail parce que l'e-mail d'autorisation n'est pas accordée à votre site web dev. La façon dont je le fais c'est d'aller à https://www.facebook.com/settings?tab=applications, supprimer mon facebook app, et répéter le processus à nouveau.
Lire la changelog, c'est par la conception. Vous avez besoin de demander explicitement les champs et les bords que vous voulez est retourné dans la réponse: