此问题的简单版本:如何在用户身份登录后通过Facebook验证用户是否已通过身份验证?
VS2013,ASP.NET SPA模板,ASP.NET Identity 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;
}
(这两件事的价值是" LOCAL AUTHORITY"并且返回null。)
在正常工作的情况下,providerKeyClaim.Issuer ==" Facebook"。任何人都可以解释这个检查是什么,以及为什么这个条件正在满足Facebook登录?我希望我知道它最后一次对我有用。我更新了我的ASP.NET身份版本,虽然我不确定它是否有效。
更新:看起来在调用GetExternalLogin期间,User.Identity对象是由Facebook发布的。但是对于随后的GetUserInfo调用,它是一个完全独立的本地生成的对象,由ASP.NET Identity组件生成。
答案 0 :(得分:1)
ExternalLogin存储在一个单独的cookie中,一旦正常登录发生就会被删除(为什么你只看到第一个请求)。 Identity v3会自动添加一个特殊声明,以便您查看原始登录提供程序的内容。您可以通过在第一个请求期间向用户添加类似LoginMethod声明的内容(在默认模板中的ExternalLoginCallback方法的等效内容中)来执行类似的操作