Я пытаюсь создать поток аутентификации между сервером, используя PHP PHP SDK и без Javascript, как указано here. До сих пор я успешно создал LoginUrl, который позволяет пользователю входить в Facebook, а затем перенаправлять обратно в мое приложение и проверять параметр состояния для защиты CSFR.Обмен Facebook-аутентификацией для токена доступа с использованием PHP SDK
Моя проблема заключается в том, что я не могу заставить работать API-интерфейс, который должен заменить мой код аутентификации для токена доступа. Я разграбил любую аналогичную проблему, с которой столкнулся Google, чтобы найти возможные решения. Но конечный результат всегда был один: нет токена доступа, нет сообщения об ошибке, которое я мог бы оценить.
Исследуя тему дал следующий совет, который я тестировал:
- URL-адрес, указанный в App Settings должен быть родителем папка
$appUrl
. - использовать локон, чтобы сделать запрос вместо функции SDK
api()
Я был на этом в течение 2 дней прямо сейчас и действительно могли бы использовать некоторую помощь.
<?php
require '../inc/php-sdk/src/facebook.php';
// Setting some config vars
$appId = 'MY_APP_ID';
$secret = 'MY_APP_SECRET';
$appUrl = 'https://MY_DOMAIN/appFolder';
$fbconfig = array('appId'=>$appId, 'secret'=>$secret);
$facebook = new Facebook($fbconfig);
// Log User in with Facebook and come back with Auth Code if not yet done
if(!(isset($_SESSION['login']))){
$_SESSION['login']=1;
header('Location: '.$facebook->getLoginUrl());
}
// process Callback from Facebook User Login
if($_SESSION['login']===1) {
/* CSFR Protection: getLoginUrl() generates a state string and stores it
in "$_SESSION['fb_'.$fbconfig['appId'].'_state']". This checks if it matches the state
obtained via $_GET['state']*/
if (isset($_SESSION['fb_'.$fbconfig['appId'].'_state'])&&isset($_GET['state'])){
// Good Case
if ($_SESSION['fb_'.$fbconfig['appId'].'_state']===$_GET['state']) {
$_SESSION['login']=2;
}
else {
unset($_SESSION['login']);
echo 'You may be a victim of CSFR Attacks. Try <a
href="'.$facebook->getLoginUrl().'">logging in</a> again.';
}
}
}
// State check O.K., swap Code for Token now
if($_SESSION['login']===2) {
$path = '/oauth/access_token';
$api_params = array (
'client_id'=>$appId,
'redirect_uri'=>$appUrl,
'client_secret'=>$secret,
'code'=>$_GET['code']
);
$access_token = $facebook->api($path, 'GET', $api_params);
var_dump($access_token);
}
Отлично работает, спасибо! – Sarke