JS SDK getLoginStatus не возвращает идентификатор пользователя и подписанный запрос

Я использую PhoneGap/Cordova с плагином facebook. Кажется, все работает, за исключением getLoginStatus, который не работает, как определено здесь и здесь. При вызове он возвращает некоторые данные, но не все: он не возвращает ни userID, ни signedRequest. Вот код:

FB.getLoginStatus(function(response) {
  if (response.status == 'connected') {
    var fb_uid = response.authResponse.userID;
    var fb_signedRequest = response.authResponse.signedRequest;
    alert('logged in');
  } else {
    alert('not logged in');
  }
});

userID заполнен многоточием (...), а signedRequest не определен.

Мне удалось получить идентификатор пользователя с помощью графического вызова /me:

FB.api('/me', function(me){
  if (me.id) {
    var fb_uid = me.id;
  }
});

Мне не удалось найти в документации способ получить signed_request, который я должен использовать для аутентификации пользователя facebook в удаленной службе, к которой пользователь уже подключен с помощью facebook (я уже сделал вызов для входа в систему, поэтому пользователь OK). В основном проблема в том, что мой вызов getLoginStatus возвращает

{
    status: 'connected',
    authResponse: {
        session_key: true,
        accessToken: 'a long string...',
        expiresIn:'a number',
        sig: '...',   //exactly this string
        userID:'...'  //exactly this string
        secret:'...'  //exactly this string
        expirationTime:'a long number'
    }
}    

вместо того, что задокументировано


person Marco Ottolini    schedule 07.06.2012    source источник
comment
Для чего нужен подписанный запрос?   -  person    schedule 07.06.2012
comment
Интересно. Очевидно, что-то очень не так с ответом аутентификации, вопрос в том, где он запутался. Можете ли вы использовать анализатор сети, чтобы проверить ответ от facebook?   -  person Nitzan Tomer    schedule 07.06.2012
comment
AustinAllover: Мне нужен подписанный запрос, чтобы передать его моему веб-сервису, чтобы создать там локального пользователя. Если я не использую подписанный запрос, я не могу проверить на своем сервере с помощью PHP SDK, действительно ли пользователь хочет подключиться к моему приложению. Но вопрос в том, почему FB не возвращает userID или signedRequest, если он должен это делать?   -  person Marco Ottolini    schedule 07.06.2012
comment
Ницан: Нет, я не могу использовать сниффер, потому что приложение работает на iPhone. Но ответ интерпретируется JS SDK, поэтому они должны сами все испортить, что действительно может иметь место...   -  person Marco Ottolini    schedule 07.06.2012
comment
Кажется, это может быть проблема, связанная только с PhoneGap/Cordova: github. com/davejohnson/phonegap-plugin-facebook-connect/issues/ Ницан, вы направили меня в правильном направлении: Facebook JS SDK отличается от статической версии SDK, поставляемой с плагином Cordova. Так что, вероятно, ответ от facebook правильный, но предоставленный SDK не может с этим справиться...   -  person Marco Ottolini    schedule 07.06.2012
comment
@MarcoOttolini, тебе удалось это решить?   -  person Timm    schedule 15.08.2012
comment
да. @MarcoOttolini Вам удалось? Потому что это происходит и со мной.   -  person Görkem Öğüt    schedule 25.02.2013
comment
У меня та же проблема, и проблема на GitHub все еще открыта: github.com /phonegap/phonegap-facebook-plugin/issues/151   -  person Neus    schedule 02.08.2013


Ответы (1)


В качестве фона, когда аутентификация происходит с использованием подключаемого модуля, API JavaScript SDK вызывает SDK iOS/Android для обработки авторизации, а затем передает данные аутентификации ответа обратно в часть JS. Собственные SDK (iOS/Android) не возвращают подписанные запросы, чтобы иметь возможность передать их в JS. Вот почему он пустой.

Если вы используете последний плагин, вы должны, по крайней мере, теперь видеть идентификатор пользователя. Тот, что был в июне, вероятно, не передал это обратно. В противном случае в качестве обходного пути вы можете выполнить вызов конечной точки /me, когда аутентификация в вашем JS-коде будет успешной, чтобы получить идентификатор пользователя. См. пример Hackbook, который делает это.

person C Abernathy    schedule 24.10.2012