FacebookAuthenticatedContext返回null电子邮件

时间:2014-11-25 09:33:28

标签: asp.net-mvc facebook authentication owin

我在Facebook身份验证方面存在此问题,以下是我们遇到此问题时遇到的以下步骤:

  • 用户A使用设备A通过Facebook注册我们的应用程序 认证
  • 用户A首先成功进入注册页面 姓名,姓氏和从Facebook身份验证中获取的电子邮件。
  • 用户A注册。
  • 用户A退出我们的应用程序以及Facebook。
  • 用户B使用与用户A(设备A)相同的设备注册到我们的 应用程序通过Facebook。
  • 每次尝试使用时,用户B都会被重定向到登录页面 Facebook身份验证。

所以基本上问题是使用相同设备的后续Facebook身份验证存在问题。在ExternalLoginCallback方法中,AuthenticationManager.GetExternalLoginInfoAsync每次为用户B返回一个空值。

我尝试根据我在网络上找到的解决方案更改FacebookAuthenticationProviderOptions,但这些解决方案都没有奏效。这是我正在使用的当前代码:

string XmlSchemaString = "www.w3.org/.../XMLSchema";
        FacebookAuthenticationOptions options = new FacebookAuthenticationOptions();
        options.Scope.Add("email");
        options.AppId = "...";
        options.AppSecret = "...";
        options.Provider = new FacebookAuthenticationProvider()
        {
            OnAuthenticated = (context) =>
            {
                context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, XmlSchemaString, "Facebook"));
                context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:email", context.Email, XmlSchemaString, "Facebook"));
                foreach (var x in context.User)
                {
                    string claimType = string.Format("urn:facebook:{0}", x.Key);
                    string claimValue = x.Value.ToString();
                    if (!context.Identity.HasClaim(claimType, claimValue))
                    {
                        context.Identity.AddClaim(new Claim(claimType, claimValue, XmlSchemaString, "Facebook"));
                    }
                }
                return Task.FromResult(0);
            }
        };
        options.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
        app.UseFacebookAuthentication(options);

在上面的代码中,上下文是asnyc,这导致AuthenticationManager.GetExternalLoginInfoAsync在按照上述步骤后每次为用户B返回一个null,这就是为什么它一直在用户B登陆登录页面的原因,所以我将async和context.Email结果删除为null。

为了记录,如果我尝试使用Facebook登录用户A,它可以正常工作。如果有人遇到这个问题,任何帮助将不胜感激。我一直试图解决这个问题差不多3天了,我找到的所有修复工作都没有用。

----- ---- EDIT

我发现原因,如果Facebook帐户中的电子邮件尚未确认,则会出现错误。有没有解决方法,我们的应用程序需要电子邮件信息。

谢谢,

0 个答案:

没有答案