c# - ExternalLoginInfo 电子邮件在 Microsoft 和 Facebook oauth2、MVC C# 中始终为 null?

标签 c# asp.net-mvc oauth oauth-2.0

我正在为 ExternalLoginCallback
使用以下代码 在 google 中一切正常。但在 FacebookMicrosoft 中,loginInfo.Email 始终为空。 以下代码有什么问题?

    [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
    });
}

我正在使用以下软件包:

<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" />

最佳答案

我找到了解决方案,我们必须在 Startup.Auth.cs 文件中使用 FacebookMicrosoft 如下:

// Facebook
app.UseFacebookAuthentication(new FacebookAuthenticationOptions
{
    AppId = "---",
    AppSecret = "---",
    Scope = { "email" }
});

// Microsoft
app.UseMicrosoftAccountAuthentication(new MicrosoftAccountAuthenticationOptions()
{
    ClientId = "---",
    ClientSecret = "---",
    Scope = { "wl.basic", "wl.emails" }
});

关于c# - ExternalLoginInfo 电子邮件在 Microsoft 和 Facebook oauth2、MVC C# 中始终为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878224/

相关文章:

java - 如何为 Multi-Tenancy 配置 Spring Oauth2

c# - DotNetOpenAuth 与谷歌日历提要

c# - 如何创建带前缀的 XmlElement 属性?

c# - 从 C# 传递 SSIS 参数

c# - EntityFramework 抛出 NullReferenceException

asp.net-mvc - 如何使用 Action 和 Controller 名称获取 ActionDescriptor

asp.net-mvc - Kendo UI Grid Ajax 摧毁成功

c# - 获取 OAuth 回调 [C#]

c# - 如何检测 KeyDown 或 KeyUp WPF 事件中的方括号?

c# - 如何修复 C# 中的 'Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack' 错误