[英]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.