2012-02-09 2 views
2

먼저 oauth 작품을 어떻게 사용할 수 있는지 간단히 알고 싶습니다. 이 플러그인에서 전달해야하는 것과이 플러그인이 반환 할 내용. 다른 PHP 프레임 워크 용 플러그인을 사용자 정의해야합니까? 나는 그들의 프레임 워크가 서로 다른 oauth의 다른 확장 인 것을 보았다. 왜 그렇습니까?oauth 플러그인을 통해 Twitter, Google, Facebook Apis를 사용하여 사용자를 인증해야합니까?

나는 YII 프레임 워크에서 소셜 네트워크를 사용하여 사용자를 인증 할 필요가 난의 OAuth를 사용하는 YII의 eouath 확장을 통합하고 접근이

공공 기능 actionGoogleAds 같은 구글 사용자의 광고 서비스를 사용하는 작업을 만들었습니다() {

Yii::import('ext.eoauth.*'); 

    $ui = new EOAuthUserIdentity(
      array(
       //Set the "scope" to the service you want to use 
        'scope'=>'https://sandbox.google.com/apis/ads/publisher/', 
        'provider'=>array(
          'request'=>'https://www.google.com/accounts/OAuthGetRequestToken', 
          'authorize'=>'https://www.google.com/accounts/OAuthAuthorizeToken', 
          'access'=>'https://www.google.com/accounts/OAuthGetAccessToken', 
        ) 
      ) 
    ); 

    if ($ui->authenticate()) { 
     $user=Yii::app()->user; 
     $user->login($ui); 
     $this->redirect($user->returnUrl); 
    } 
    else throw new CHttpException(401, $ui->error); 

} 

내가 링크드 인과 같은 다른 서비스를 사용하려는 경우, 페이스 북, 난 그냥 범위 및 매개 변수를 변경하거나 또 다른 일부 내용을 변경하는 권한이 필요한 사용자를 가입 바로 트위터. 내 데이터베이스에 사용자 정보를 저장하려면 어떻게합니까?

답변

4

은 간단한 경우에는 테이블 필드 "정체성" "* EXTERNAL_ID *"와 "제공"를 사용할 수 있습니다. 모든 OAuth 제공자는 고유 한 사용자 식별 자 (해당 제공자에 대해서만 uqiue)를 제공해야합니다. 사이트에서 고유하게 만들려면 공급자가 사전 정의 된 이름 (상수)과 쌍을 사용할 수 있습니다. 그리고 다른 추가 필드 (제공자가 제공하는 경우).

동일한 테이블에서 내부 인증의 ID 데이터를 제공자 이름 'custom'(예 :)로 저장해야합니다. 비밀 번호 및 기타 데이터를 저장하려면 별도의 테이블을 사용하고이 테이블의 PK는 "* external_id *"가됩니다. 유니버설 방식.

그리고 PHP, 이런 식으로 뭔가 :

class UserIdentity extends CUserIdentity 
{ 
    protected $extUserID; 

    public function __construct($extUserID) 
    { 
      $this->extUserID = $extUserID; 
    } 
    ... 
    public function authenticate() 
    { 
     ... 
     //After search $this->extUserID as PK in users table (built-in authorization) 
     ... 
     $identity = Identities::model()->findByAttributes(array(
      'ext_id' => $this->extUserID, 
      'service' => 'forum', 
     )); 
     if(!count($identity)) 
     { 
      $identity = new Identities; 
      $identity->ext_id = $this->extUserID; 
      $identity->service = 'forum'; 
      $identity->username = $userData['username']; 
      $identity->save(); 
     } 
     $this->setState('id', $identity->id); 
     ... 
    } 
} 
관련 문제