2015-05-10 2 views
1

Простая версия этого вопроса: Как узнать, аутентифицирован ли пользователь через Facebook после входа в систему с помощью идентификатора 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. Я выкопал в код, и нашел обижая строку: (. Значение обоих этих вещей является «LOCAL AUTHORITY» и нуль возвращается)

if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer) 
{ 
    return null; 
} 

В том случае, когда он работает правильно, providerKeyClaim.Issuer == "Facebook". Может ли кто-нибудь объяснить, для чего эта проверка, и почему это условие выполняется, несмотря на вход в Facebook? Хотел бы я знать, когда это в последний раз работало для меня. Я обновил мою версию ASP.NET Identity, хотя я не уверен, что это сработало после.

Обновление: Похоже, во время вызова GetExternalLogin объект User.Identity был выпущен Facebook. Но для последующего вызова GetUserInfo это полностью отдельный локально созданный объект, созданный компонентами ASP.NET Identity.

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

1

ExternalLogin хранится в отдельном файле cookie, который удаляется после обычного входа в систему (почему вы видите его только для первого запроса). Identity v3 автоматически добавляет специальное требование, которое позволит вам узнать, что такое исходный логин. Вы можете сделать что-то подобное, добавив что-то вроде заявки LoginMethod пользователю во время этого первого запроса (в эквиваленте метода ExternalLoginCallback, который находится в шаблонах по умолчанию)

Смежные вопросы