需要通过oauth插件使用Twitter,Google,Facebook Apis对用户进行身份验证吗?

时间:2012-02-09 11:50:03

标签: oauth yii authentication

首先,我简单地想知道如何使用oauth作品。我们需要传递这个插件以及这个插件将返回什么。我们是否必须为不同的php框架定制插件。我已经看到它们是不同框架的oauth的不同扩展,为什么会这样?

我需要在yii框架中使用社交网络对用户进行身份验证,并且我已经集成了yii的eouath扩展以使用oauth并且已经采取行动来使用google用户的广告服务这样

公共功能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);

}

如果我想使用其他服务,例如linkedin,facebook,twitter,只是为了注册用户,我应该更改范围和参数,还是必须在其他地方进行一些更改。如何将用户信息存储在我自己的数据库中?

1 个答案:

答案 0 :(得分:4)

在简单的情况下,您可以将表“ identities ”与字段“* external_id *”和“ provider ”一起使用。每个OAuth提供商都必须提供唯一的用户标识符(仅适用于该提供商)。要使其在您的站点上唯一,您可以使用与提供程序预定义名称(常量)的对。以及任何其他附加字段(如果提供商提供)。

在同一个表中,您应该存储内部授权的身份数据,提供者名称为“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);
      ...
    }
}