После нескольких дней охоты по сети, включая Graph API, старый REST API, FQL и т. Д. - кажется, SDK JavaScript является единственным, который позволяет эту информацию без предварительного токена доступа.
Поэтому мне пришлось использовать JavaScript SDK:
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function () {
FB.init({ appId: 'xxxxxxx', status: true, cookie: false, xfbml: false
});
FB.getLoginStatus(function (response) {
if (response.session)
window.location = '/Facebook/LogOn'
});
};
(function () {
var e = document.createElement('script');
e.async = true;
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
} ());
</script>
По сути, сначала я загружаю API JS асинхронно, чтобы избежать блокировки.
Затем я вижу, есть ли у пользователя сеанс Facebook.Если они это сделают, я перенаправляю на мой FacebookController
, который выполняет перенаправление OAuth (которое сразу же вернется с токеном - поскольку они уже авторизованы), и затем устанавливает мой собственный файл cookie.
Затем включается мой глобальный фильтр действий, он видит, что есть cookie, и регистрирует пользователя. Отлично.
Обратите внимание, что у меня есть cookie: false
- это потому, что я отслеживаю свои собственные куки для OAuthтокен и идентификатор FB.