用于PHP / getSessionFromRedirect()的Wordpress和Facebook SDK

时间:2015-04-14 09:45:14

标签: php wordpress facebook session facebook-graph-api

我正在尝试将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导致失败的原因吗?

  • 我的Facebook应用中的所有设置都已经过验证,包括尾部斜杠和“有效的OAuth重定向URI”。
  • 在Wordpress中点击login-url时,会创建会话“FBRLH_state”,但不会创建所需的“fb_token。”
  • 从外部文件登录,然后访问(未重定向到)Wordpress主题时,会话“fb_token”存在且Facebook用户按预期登录。
  • 将Facebook从Wordpress主题重定向到外部文件(反之亦然)也不起作用。

编辑:以下是代码段:

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']后有一个新值。

0 个答案:

没有答案