我正在尝试将Facebook登录到我的Wordpress网站,但 $helper->getSessionFromRedirect();
在从Facebook重定向后始终返回NULL。
我的网站有一个自定义的Wordpress主题,在我的“header.php
”我包含一个名为“login.php
”的文件(其中包含适用于PHP的Facebook SDK,登录网址等)使用require_once()方法。
当我将'login.php'文件中的相同代码复制到外部非Wordpress文件中时,一切正常(并且当然不会改变包含不使用Wordpress常量 WP_CONTENT_DIR 的包含的路径)并直接在我的浏览器中访问它。但是,无论我尝试什么,我的“header.php
”中包含的相同代码都无效。
它不会让我登录,因为它无法创建会话。
如此简化,我的脚本运行正常,但不是我的Wordpress主题的一部分。 知道什么可能是Wordpress导致失败的原因吗?
FBRLH_state
”,但不会创建所需的“fb_token
。”fb_token
”存在且Facebook用户按预期登录。编辑:以下是代码段:
define( 'FACEBOOK_SDK_V4_SRC_DIR', '/path/to/facebook-php-sdk/src/Facebook/' );
require( '/path/to/facebook-php-sdk/autoload.php' );
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\GraphUser;
session_start();
$bln_error = true;
$redirect_url = 'http://www.example.com/';
FacebookSession::setDefaultApplication( '************', '********************************' );
if( isset( $_SESSION['fb_token'] ) ) {
// create new session from saved access_token
$session = new FacebookSession( $_SESSION['fb_token'] );
// validate the access_token to make sure it's still valid
try {
if( !$session->validate() ) {
$session = null;
}
} catch ( Exception $e ) {
// catch any exceptions
$session = null;
}
} else if( isset( $_GET['state'] ) ) {
$helper = new FacebookRedirectLoginHelper( $redirect_url );
try {
$session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
echo $ex->getMessage();
} catch(\Exception $ex) {
// When validation fails or other local issues
echo $ex->getMessage();
}
if ( isset( $session ) && $session ) {
// Logged in.
echo 'Logged in.';
$bln_error = false;
}
} else {
$helper = new FacebookRedirectLoginHelper( $redirect_url, '************', '********************************' );
$fb_login_url = $helper->getLoginUrl();
echo '<a id="fb_link" href="' . $fb_login_url . '">Login with Facebook</a>';
}
更具体:
初始$_SESSION['FBRLH_state']
与重定向前后的$_GET['state']
中的$fb_login_url
相同。
重定向$_SESSION['FBRLH_state']
后有一个新值。