Korzystam z następującego kodu dla ExternalLoginCallback
W google
wszystko jest w porządku. ale w Facebook
i Microsoft
loginInfo.Email
jest zawsze pusta. Co jest nie tak z następującym kodem?Email ExternalLoginInfo zawsze ma wartość zerową w Microsoft i Facebook oauth2, MVC C#?
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
ExternalLoginInfo loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
// loginInfo.Email is always null, so FindByEmailAsync throws an exception
UserIdentityModel user = await UserManager.FindByEmailAsync(loginInfo.Email);
if (user != null)
{
await SignInAsync(user, false);
return RedirectToLocal(returnUrl);
}
// 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
{
UserName = loginInfo.DefaultUserName,
Email = loginInfo.Email
});
}
Używam następujące pakiety:
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Facebook" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Google" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.MicrosoftAccount" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Twitter" version="3.0.1" targetFramework="net45" />
Nie korzystałem jeszcze z Microsoft oAuth, ale w przypadku Facebooka musisz konkretnie poprosić o uprawnienia do wiadomości e-mail w konfiguracji aplikacji na Facebooku, w przeciwnym razie nie otrzymasz adresu e-mail. – Stephen
Zrobiłem to, a ja sprawdziłem pocztę. –