此问题的简单版本:我如何确定用户在使用ASP.NET身份登录后通过Facebook对用户进行身份验证?
VS2013,ASP.NET SPA模板,ASP.NET身份2.2.1:
我想知道用户是否通过Facebook进行了认证。我以前可以打电话:
ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
我的GetExternallogin方法内部。但是,现在,它是从GetExternallogin(返回描述Facebook登录的对象)调用的第一次工作,但是在将后备返回到Facebook时,它再次从我的GetUserInfo()方法中再次称为null。我挖掘了代码,并找到了有问题的线:
if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
{
return null;
}
(这两种内容的价值是"地方当局"和null返回的。)
在工作正常工作的情况下,ProviderKeyClaim.issuer ==" Facebook"。谁能解释此检查的目的,以及尽管Facebook登录,为什么还要满足这种情况?我希望我知道它上次为我工作的时候。我更新了我的ASP.NET身份的版本,尽管我不确定它是否有效。
更新:看起来像是在致电GetExternallogin的电话中,user.Identity对象是由Facebook发出的。但是,对于随后的getuserinfo调用,它是由ASP.NET身份组件生成的完全独立的本地生成的对象。
外部金蛋白存储在一个单独的cookie中,一旦发生正常登录,该cookie就会被删除(为什么只为第一个请求看到它)。身份v3自动添加了一个特殊的索赔,该声明使您可以查看原始登录提供商是什么。您可以通过在第一个请求中向用户添加类似loginMethod索赔的内容(在默认模板中的externalloginCallback方法的等效物)