Как только у меня будет access_token, как мне получить связанную с сервером user_id сторону? - PullRequest
0 голосов
/ 23 января 2011

Я знаю, что могу запросить:

https://graph.facebook.com/me?access_token=ACCESS_TOKEN 

Но «я», которое относится к «активному пользователю», который предположительно является пользователем, вошедшим в Facebook на этом компьютере, который будет сервером, мне нужнопользователь facebook на клиентах end user_id, поэтому мой сервер может отправлять запросы в GraphAPI об этом пользователе в формате:

https://graph.facebook.com/USER_ID?access_token=ACCESS_TOKEN 

Ответы [ 2 ]

0 голосов
/ 30 января 2011

Глядя на исходный код SDK, я обнаружил, что они анализируют user_id из токена доступа:

        /*
         * access_token:
         *   1249203702|2.h1MTNeLqcLqw__.86400.129394400-605430316|-WE1iH_CV-afTgyhDPc
         *                                               |_______|
         *                                                   |
         *                                                user id
         */

НО не нужно делать это, так как вместо запроса токенаВаше приложение должно перенаправить их на целевую страницу, после чего Facebook повторно отправит подписанный запрос с access_token и user_id.В документации Facebook по авторизации (кажется, с тех пор она была обновлена) неправильно указано, что приложение запрашивает токен, но это применимо только к веб-сайтам, а не к приложениям.Меня раздражает, как документы из фейсбука постоянно говорят о том, насколько это просто, но они все равно не могут просто объяснить и ошибиться ...

0 голосов
/ 23 января 2011

Полагаю, вам не хватает основ концепции аутентификации пользователей, которая относится не только к Facebook.

Предположим, что два пользователя A & B посетили domain.com/fb_profile.php, который содержит ( пример файл из PHP-SDK):

<?php

require '../src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'APPLICATION_ID',
  'secret' => 'APPLICATION_SECRET',
  'cookie' => true,
));


$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}

// rest of code

Они оба успешно вошли в систему, и страница перезагрузилась. Теперь произошло то, что у нас есть действительный сеанс для обоих пользователей!
И когда fb_profile.php запрашивается у пользователя A ( клиент ), $facebook->api('/me'); будет удерживать детали "активного пользователя" из этого конкретного запроса (клиента) ! и ваша машина ( сервер ) будет хранить сеансы для всех зарегистрированных пользователей!

Таким образом, каждый раз, когда fb_profile.php запрашивается у клиента с допустимым сеансом, результат выполнения $facebook->api('/me'); будет связан с этим конкретным сеансом из этого конкретный клиент!

Так что вы сказали здесь (в жирный ) неправильно:

Но «я», которое относится к «активному пользователь », который предположительно является пользователем зашли на фейсбук на этой машине который будет сервером

И, кстати, когда у вас есть действительный сеанс, оба:

$facebook->api('/me');

А:

$facebook->api('/USER_ID');

Возвращает ту же информацию (, конечно, USER_ID - это идентификатор пользователя, вошедшего в систему на стороне клиента ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...