0

海的開發夥伴們,的Oauth實現使用PHP和JS的Facebook SDK

我使用笨(電子商務樣的平臺),實現一個網站登錄到我的Web應用程序。

所以,我有很多過濾器在我的網站基於他們我試圖獲取數據和請求服務。所以用戶必須登錄才能申請服務,所以最後我強迫用戶登錄以繼續(如購買某物)。

問題在於,我使用Javascript SDK實現了Facebook登錄並嘗試獲取訪問權限。並使用FacebookJavaScriptLoginHelper在codeigniter中創建了一個FACEBOOK庫來獲取用戶數據。現在我應該更新所有會話中的用戶詳細信息,並將用戶名動態添加到codeigniter中的當前視圖。

,你可以看看下面有什麼我都試過高達現:

Facebook的Libabry:

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

if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

// Autoload the required files 
require_once(APPPATH . 'libraries/facebook/autoload.php'); 

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

class Facebook { 
    var $ci; 
    var $helper; 
    var $session; 
    var $permissions; 

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

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

     $this->helper = new FacebookJavaScriptLoginHelper(); 
      // No session exists 
     try { 
      $this->session = $this->helper->getSession(); 
     } catch(FacebookRequestException $ex) { 

     } catch(Exception $ex) { 
     // When validation fails or other local issues 

     } 
    } 

    /** 
    * Returns the login URL. 
    */ 
    public function login_url() { 
    return $this->helper->getLoginUrl($this->permissions); 
    } 

    /** 
    * Returns the current user's info as an array. 
    */ 
    public function get_user() { 

    if ($this->session) { 

     $request = (new FacebookRequest($this->session, 'GET', '/me'))->execute(); 

     // Get response as an array 
     $user = $request->getGraphObject()->asArray(); 

     return $user; 
    } 
    return false; 
    } 

    public function logout(){ 
    session_start(); 
    session_destroy(); 
    } 

} 

,在我的控制,我有我的索引功能,這樣

public function index(){ 
    $fb_data = $this->facebook->get_user(); 
    $profile_data=array(
     'name'=>$fb_data['name'], 
     'id' =>$fb_data['id'], 
     'image'=>'http://graph.facebook.com/'.$fb_data['id'].'/picture?width=300', 
     'email'=>$fb_data['email'], 
     'oauthProvider'=>'facebook', 
     ); 
    $this->session->set_userdata('user_name', $fb_data['name']); 
    echo json_encode($profile_data); 
} 

我標題瀏覽:

<?php if($this->session->userdata('user_name')): ?> 

      <li id="userName" class="dropdown"> 
       <a href="#" id="userNameAnchor" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Welcome <span class="user_name"><?php echo $this->session->userdata('user_name')?></span><span class="caret"></span></a> 
       <ul class="dropdown-menu"> 
       <li><a href="#">Account settings</a></li> 
       <li><a href="<?php echo base_url('redirectoauth/FbLogout')?>">Logout</a></li> 
       </ul> 
      </li> 
<?php else: ?> 
<li id="login"><a href="#socialLogin" data-toggle="modal">Login</a></li> 

<?php endif; ?> 

Ajax調用

$.ajax({ 
url:"<?php echo base_url('redirectoauth');?>", 
success:function(data){ 
var data=$.parseJSON(data); 
$('.user_name').html(data.name); 
$('#userName').css('display','block') 
$('#login').css('display','none'); 
$('#socialLogin').modal('hide'); 
} 
}); 

任何參考或TUTS,對建築的建議,以解決這個問題。

+0

你不能設置會話所有我們的網站Facebook登錄? – shafiq

+0

@ user1048123找不到你 – saikiran

+0

你得到的是什麼問題? Facebook登錄後無法設置會話嗎? – shafiq

回答

0

這將解決您的問題

Ajax調用

$.ajax({ 
url:"<?php echo base_url('redirectoauth');?>", 
    success:function(data){ 
    var data=$.parseJSON(data); 
    $('.user_name').html(data.name); 
    $('#logined').css('display','block') 
    $('#sociallogined').css('display','none'); 
    $('#socialLogin').modal('hide'); 
} 
}); 

視圖

<ul id="logined" <?php echo $this->session->userdata('user_name') ? 'style="display:none"' :''; ?>> 
    <li id="userName" class="dropdown"> 
       <a href="#" id="userNameAnchor" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Welcome <span class="user_name"><?php echo $this->session->userdata('user_name')?></span><span class="caret"></span></a> 
       <ul class="dropdown-menu"> 
       <li><a href="#">Account settings</a></li> 
       <li><a href="<?php echo base_url('redirectoauth/FbLogout')?>">Logout</a></li> 
       </ul> 
      </li> 
</ul> 
<ul id="sociallogined"> 
    <li id="login"><a href="#socialLogin" data-toggle="modal">Login</a></li> 
</ul> 
+0

這是否解決了您的問題? – shafiq