Tôi đang sử dụng mã sau cho ExternalLoginCallback
Trong google
mọi thứ đều OK. nhưng trong Facebook
và Microsoft
loginInfo.Email
luôn là giá trị rỗng. Có gì sai với mã sau?ExternalLoginInfo Email luôn là null trong Microsoft và 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
});
}
Tôi đang sử dụng các gói sau:
<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" />
Chưa sử dụng Microsoft oAuth, nhưng với Facebook, bạn cần phải yêu cầu cụ thể về quyền truy cập email trong cấu hình ứng dụng facebook của bạn, nếu không bạn sẽ không nhận được địa chỉ email. – Stephen
Tôi đã thực hiện và tôi đã kiểm tra email. –