2013-07-31 57 views
0

我使用Facebook Opengraph extension作爲登錄系統。 Facebook登錄工作正常,我也可以輕鬆地將數據保存在我的數據庫表中。但它不會在YII系統中驗證用戶身份。通過yii中的開放式圖形擴展驗證用戶使用Facebook API

例如,我有accessRulesevents如下:

public function accessRules() 
{ 
    return array(
     array('allow', // allow authenticated user to perform 'buy' actions 
      'actions'=>array('buy'), 
      'users'=>array('@'), 
     ), 
    ); 
} 

當用戶使用Facebook的使用登錄,無法達到設定頁。其重定向到profile page(用戶登錄時的默認頁面)。

下面的代碼我使用Facebook login

//Facebook login 
$user = Yii::app()->facebook->getUser(); 
try{ 
    $user_profile = Yii::app()->facebook->api('/me?scope=email'); 
} catch(Exception $e){} 
if($user) { 
    if(Yii::app()->user->isGuest){ 
     $mbr = Facebook::model()->findByPk($user_profile['id']); 
     if($mbr===null){ 
      $randomNum = rand(0,99999); 
      $fb = new Facebook; 
      $fb->mbrm_id = $user_profile['id']; 
      $fb->mbrm_username = $user_profile['username'].$randomNum; 
      $fb->mbrm_emailid = $user_profile['email']; 
      $fb->mbrm_name = $user_profile['name']; 
      $fb->mbrm_visits = "0"; 
      $fb->mbrm_sts = "a"; 

      if($fb->save()){ 
       Yii::app()->user->setState('title',$user_profile['username'].$randomNum); 
       $this->redirect(array('profile/view','id'=>$user_profile['username'].$randomNum)); 
      } 
     } else { 
      Yii::app()->user->setState('title',$mbr->mbrm_username); 
      $mbr->saveCounters(array('mbrm_visits'=>1)); 
      $this->redirect(array('profile/view','id'=>$mbr->mbrm_username)); 
     } 
    } else { 
      $this->redirect(array('profile/view','id'=>$mbr->mbrm_username)); 
     } 
} 

即使我使用Yii::app()->user->setState('title',$mbr->mbrm_username);,但它不工作。請幫忙!

回答

0

我在controller中添加了以下規則。這有助於驗證Facebook用戶。

代碼

array('allow', // allow authenticated user to perform 'create' and 'update' actions 
    'actions'=>array('buy'), 
    'expression'=>'Yii::app()->facebook->getUser()', 
), 
相關問題