簡體   English   中英

Javascript登錄助手CodeIgniter-無法在服務器端檢索用戶

[英]Javascript Login Helper CodeIgniter - cant retrieve user server-side

我正在使用CodeIgniter,已經安裝了Facebook SDK4。由於自動加載無效,因此必須包含文件。 我正在使用Javascript登錄用戶。

這是facebook.php(在庫根目錄中)。 我有facebook要在配置中自動加載。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// Autoload the required files
require_once( APPPATH.'libraries/Facebook/FacebookSession.php' );
require_once( APPPATH.'libraries/Facebook/FacebookRequest.php' );
require_once( APPPATH.'libraries/Facebook/FacebookResponse.php' );
require_once( APPPATH.'libraries/Facebook/FacebookSDKException.php' );
require_once( APPPATH.'libraries/Facebook/FacebookRequestException.php' );
require_once( APPPATH.'libraries/Facebook/FacebookAuthorizationException.php' );
require_once( APPPATH.'libraries/Facebook/GraphObject.php' );
require_once( APPPATH.'libraries/Facebook/FacebookSignedRequestFromInputHelper.php' );
require_once( APPPATH.'libraries/Facebook/FacebookJavaScriptLoginHelper.php' );


use Facebook\FacebookJavaScriptLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookSession;

class Facebook {
    var $ci;
    var $permissions;


  public function __construct() {

    $this->ci =& get_instance();
    $this->permissions = $this->ci->config->item('permissions', 'facebook');

    // Initialize the SDK
    $this->ci->config->load('facebook');
    FacebookSession::setDefaultApplication( $this->ci->config->item('api_id', 'facebook'), $this->ci->config->item('app_secret', 'facebook') );

    $helper = new FacebookJavaScriptLoginHelper(); //This row gives me a blank "white page" and no errror is given, nothing in log or whatsoever.
    try {

        $session = $helper->getSession();
    } catch(FacebookRequestException $ex) {
        // When Facebook returns an error
    } catch(\Exception $ex) {
        // When validation fails or other local issues
    }
    if ($session !== null) {
        $request = new FacebookRequest( $session, 'GET', '/me' )->execute();
        $user = $request->getGraphObject()->asArray();
    }
    else {
        echo 'no user';
    }

 }




}

為什么我一直都沒有用戶 即使我已登錄,$ session始終為null。我確定appid和secret是正確的。

UPDATE

肯定的appid和秘密是正確的,但是我錯了......但現在我得到了另一個問題。 當我嘗試創建FacebookJavascriptLoginHelper ()時,會發生某種異常。 我剛得到一張空白頁。 這可能是什么? (當我未登錄時,它顯示網站正常。

我嘗試記錄錯誤,但是我的日志文件中沒有任何錯誤。 (我已將其設置為在配置中記錄所有錯誤)

我的懷疑是找不到所需的文件。 我嘗試使用自動加載程序,如http://www.benmarshall.me/facebook-sdk-php-v4-codeigniter/所述,但我無法使它正常工作(這些fb文件均未包含在內) )。 然后,不包含任何文件。

UPDATE2我知道您確實應該使用Composer來正確自動加載Facebook文件。

我嘗試一下:基於此。 我所要做的就是在composer.json https://developers.facebook.com/docs/php/gettingstarted/4.0.0中添加一個條目

當我遇到這個問題時:(我已經從https://github.com/facebook/facebook-php-sdk-v4/archive/master.zip下載文件)

{
    "name": "facebook/php-sdk-v4",
    "description": "Facebook SDK for PHP",
    "keywords": ["facebook", "sdk"],
    "type": "library",
    "homepage": "https://github.com/facebook/facebook-php-sdk-v4",
    "license": "Facebook Platform",
    "authors": [
        {
            "name": "Facebook",
            "homepage": "https://github.com/facebook/facebook-php-sdk-v4/contributors"
        }
    ],
    "require": {
        "php": ">=5.4.0",
        "ext-mbstring": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.0",
        "mockery/mockery": "~0.8",
        "guzzlehttp/guzzle": "~4.0"
    },
    "suggest": {
        "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client"
    },
    "autoload": {
        "psr-4": {
            "Facebook\\": "src/Facebook/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Facebook\\Tests\\": "tests/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-master": "4.1.x-dev"
        }
    }
}

它可以在命令窗口(Windows)中輸入composer install並在我的Librarys文件夾內創建了vendor文件夾,並且看起來正確。

但是,當我加入“臉譜/ PHP-SDK-V4”: “4.0 *”,要求面:

"require": {
        "php": ">=5.4.0",
        "ext-mbstring": "*",
        "facebook/php-sdk-v4" : "4.0.*"
    },

我收到此錯誤(來自作曲家):在任何版本中都找不到請求包Facebook facebook / php-sdk-v4。

UPDATE3現在,我已經設法從Composer下載Facebook SDK,但是仍然無法自動加載工作。 我必須能夠進行此調整才能從作曲家下載facebook sdk。

{
  "minimum-stability": "dev",
  "require" : {
    "facebook/php-sdk-v4" : "4.0.*"
  }
}

我已經放棄了自動加載功能,因為我無法使其自動加載。 但是我現在開始工作了!!!!

我已經安裝了Composer(具有WAMP,您需要更改openssl才能在php文件夾的PHP-ini中可用(wamp有兩個php-ini文件)

我在CI應用程序的“ libraries”文件夾中創建了一個文件

composer.json
{
  "minimum-stability": "dev",
  "require" : {
    "facebook/php-sdk-v4" : "4.0.*"
  }
}

然后在命令提示符下安裝composer。

我將src / facebook-folder移至library / facebook(帶有SDK中的所有Facebook類)。 https://www.webniraj.com/2014/06/07/facebook-api-setting-up-the-facebook-php-sdk-4-0-x/

然后像這樣創建一個Facebook.php(在根庫中):

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// Autoload the required files
require_once( 'Facebook/HttpClients/FacebookHttpable.php' );
require_once( 'Facebook/HttpClients/FacebookCurl.php' );
require_once( 'Facebook/HttpClients/FacebookCurlHttpClient.php' );

require_once( 'Facebook/Entities/AccessToken.php' );
require_once( 'Facebook/Entities/SignedRequest.php' );

require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookSignedRequestFromInputHelper.php' );
require_once( 'Facebook/FacebookJavaScriptLoginHelper.php' );

require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookOtherException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );
require_once( 'Facebook/GraphSessionInfo.php' );

use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;

use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookJavaScriptLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphSessionInfo;

class Facebook {
    var $ci;
    var $permissions;


  public function __construct() {

    $this->ci =& get_instance();
    $this->permissions = $this->ci->config->item('permissions', 'facebook');

    // Initialize the SDK
    $this->ci->config->load('facebook');
    FacebookSession::setDefaultApplication( $this->ci->config->item('api_id', 'facebook'), $this->ci->config->item('app_secret', 'facebook') );

    //Get info based on javascript popup session
    $helper = new FacebookJavaScriptLoginHelper(); 

    //If token not already set, then try to fetch session from current FB Login!
    //
    if ( !$this->ci->session->userdata('fb_token') ) {
        try {
            $session = $helper->getSession();
        } catch(FacebookRequestException $ex) {
            // When Facebook returns an error
            log_message('INFO', 'FB ERROR' . print_r($ex,true));
        } catch(\Exception $ex) {
            // When validation fails or other local issues
            log_message('INFO', 'FB VALIDATION FAILS' . print_r($ex,true));
        }    
    }
    else {
        //FB Token already set. Then fetch user information based on token!
         $fb_token = $this->ci->session->userdata('fb_token');         
         $session = new FacebookSession( $fb_token );        
    }    

    //Now session is set by current logged in session or by current token set
    //(Session is retrieved from FB)
    if (isset($session)) {            
            $this->ci->session->set_userdata( 'fb_token', $session->getToken() );             
            $request = new FacebookRequest( $session, 'GET', '/me' );
            $response = $request->execute();
            $user = $response->getGraphObject()->asArray();
    }

 }




}

我得到它的工作沒有任何錯誤。 您不能只是嘗試每次都進行登錄檢查,因為FB會返回(煩人的)錯誤。 因此,我在第一次登錄后將收到的令牌存儲在會話中。 第二次(及以后)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM