我在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帐户中的电子邮件尚未确认,则会出现错误。有没有解决方法,我们的应用程序需要电子邮件信息。
谢谢,