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

Asp.net 如何判断用户是否通过Facebook登录,asp.net,asp.net-identity,asp.net-identity-2,Asp.net,Asp.net Identity,Asp.net Identity 2,这个问题的简单版本:如何判断用户使用ASP.NET身份登录后是否通过Facebook进行了身份验证? VS2013,ASP.NET SPA模板,ASP.NET Identity 2.2.1: 我想知道用户是否通过Facebook认证。我以前可以打这个电话: ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity); 在我的GetExternalLogin方法

这个问题的简单版本:如何判断用户使用ASP.NET身份登录后是否通过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;
}
(这两个值都是“localauthority”,返回null。)

在正确工作的实例中,providerKeyClaim.Issuer==“Facebook”。有谁能解释一下这张支票的用途,以及为什么尽管登录了Facebook,但仍然满足了这个条件?我希望我知道它最后一次对我起作用是什么时候。我更新了ASP.NET Identity的版本,但我不确定它是否在之后工作


更新:看起来像是在调用GetExternalLogin时,用户.Identity对象是由Facebook发布的。但是对于后续的GetUserInfo调用,它是一个完全独立的本地生成的对象,由ASP.NET标识组件生成。

外部登录存储在一个单独的cookie中,一旦发生正常登录,就会被删除(为什么您只在第一个请求中看到它)。Identity v3自动添加一个特殊声明,允许您查看原始登录提供程序是什么。您可以做类似的事情,在第一次请求期间向用户添加类似于LoginMethod声明的内容(在默认模板中的ExternalLoginCallback方法的等效内部)

我已经编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。