Переменная $ session не устанавливается после процесса входа в Facebook.
Вот мой index.php:
<?php
require_once('fbconfig.php'); //my config files, where I've defined $appId and $appSecret
session_start();
define('FACEBOOK_SDK_V4_SRC_DIR', '/home/.../web/www/fb-sdk/src/Facebook/');
require __DIR__ . '/fb-sdk/autoload.php';use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication($appId, $appSecret);$redirect_url = 'http://example.com/login.php';
$helper = new FacebookRedirectLoginHelper($redirect_url);
echo '<a href="' . $helper->getLoginUrl() . '">Login with Facebook</a>';
?>
А вот login.php, куда Facebook перенаправляет меня после диалога Facebook:
<?php
require_once('fbconfig.php');
define('FACEBOOK_SDK_V4_SRC_DIR', '/home/.../web/www/fb-sdk/src/Facebook/');
require __DIR__ . '/fb-sdk/autoload.php';use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookAuthorizationException;
session_start();
FacebookSession::setDefaultApplication($appId, $appSecret);$helper = new FacebookRedirectLoginHelper('http://example.com/login.php');
try {
$session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
} catch(\Exception $ex) {
// When validation fails or other local issues
}
if ($session) {
echo 'Session active';
}else{
echo 'Session not set'; //and this is the case
}
?>
В login.php должна быть установлена переменная $ session, но это не так. Я уже прочитал документацию о FacebookRedirectLoginHelper для PHP.
https://developers.facebook.com/docs/php/FacebookJavaScriptLoginHelper/4.0.0
/редактировать
Я получаю какой-то «код» в адресной строке браузера, однако FacebookRedirectLoginHelper, похоже, не обрабатывает код.
Спасибо за помощь!
Хорошо, наконец-то я решил проблему (спасибо Комментарий Райана): Сначала я собрал весь код в один файл index.php. Важно не звонить $helper->getLoginUrl
прежде чем делать это: $session = $helper->getSessionFromRedirect();
, В противном случае переменная $ session будет иметь значение NULL. Вот как я реализовал код:
<?php
require_once('fbconfig.php');
session_start();
define('FACEBOOK_SDK_V4_SRC_DIR', '/home/.../fb-sdk/src/Facebook/');
require __DIR__ . '/fb-sdk/autoload.php';use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication($appId, $appSecret);$redirect_url = 'http://example.com/';
$helper = new FacebookRedirectLoginHelper($redirect_url);$session = $helper->getSessionFromRedirect();
try {
$session = $helper->getSessionFromRedirect();
}catch(FacebookRequestException $ex){
// When Facebook returns an error
}catch(\Exception $ex){
// When validation fails or other local issues
}
if ($session) {
echo 'Logged in';
}else{
echo "not logged in";
echo '<a href="' . $helper->getLoginUrl(array( 'email', 'user_friends' )) . '">Login with Facebook</a><br/>';
}
?>
Я также настоятельно рекомендую НЕ использовать поддомен, на котором работает приложение Facebook. Я изменил домен приложений с app.example.com на example.com/app, и он работал для меня, не могу объяснить почему. Надеюсь это поможет.
Других решений пока нет …