Как использовать серверный поток Facebook с FOSFacebookBundle

Реализация по умолчанию FOSFacebookBundle использует поток на стороне клиента. Я попробовал это, и это работает. Теперь мне нужно реализовать поток на стороне сервера. Тогда я делаю это:

Гиперссылка при нажатии приведет к маршруту, где действие будет таким:

$client_id = $this->container->getParameter('fos_facebook.app_id');
$redirect_uri = urlencode($this->generateUrl('_security_check', array(), true));
$scope = implode(',', $this->container->getParameter('fos_facebook.permissions'));
$state = md5(uniqid(rand(), TRUE)); //CSRF protection
$this->getRequest()->getSession()->set('facebook_state', $state);

$oauthUrl = 'https://www.facebook.com/dialog/oauth?client_id='.$client_id.'&redirect_uri='.$redirect_uri.'&scope='.$scope.'&state='.$state;
return $this->redirect($oauthUrl);

Он перенаправляется в Facebook, когда пользователь нажимает кнопку "Разрешить", а затем перенаправляется обратно в мое приложение, где действие является тем же действием, которое обрабатывает действие на стороне клиента.

И это возвращает ошибку: активный токен доступа должен использоваться для запроса информации о текущем пользователе

Эта ошибка вызвана этой строкой:

$me = $this->fbapi->api('/me');

Какова правильная реализация, использующая серверный поток facebook?

1 ответ

Решение

Он перенаправляется в Facebook, когда пользователь нажимает кнопку "Разрешить", а затем перенаправляется обратно в мое приложение, где действие является тем же действием, которое обрабатывает действие на стороне клиента.

Это первые три шага серверного потока аутентификации, о которых позаботились.

Теперь вам также нужно выполнить четвертый шаг: https://developers.facebook.com/docs/authentication/server-side/

Другие вопросы по тегам