如何判断用户是否通过Facebook登录

时间:2015-05-10 19:41:26

标签: asp.net asp.net-identity asp.net-identity-2

此问题的简单版本:如何在用户身份登录后通过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组件生成。

1 个答案:

答案 0 :(得分:1)

ExternalLogin存储在一个单独的cookie中,一旦正常登录发生就会被删除(为什么你只看到第一个请求)。 Identity v3会自动添加一个特殊声明,以便您查看原始登录提供程序的内容。您可以通过在第一个请求期间向用户添加类似LoginMethod声明的内容(在默认模板中的ExternalLoginCallback方法的等效内容中)来执行类似的操作