Необходимо аутентифицировать пользователей с помощью Twitter, Google, Facebook Apis через плагин oauth? - PullRequest
2 голосов
/ 09 февраля 2012

Сначала я кратко хочу узнать, как вы можете использовать oauth. Что нам нужно передать в этом плагине и что этот плагин вернет. Нужно ли настраивать плагин для разных php-фреймворков? Я видел, что это разные расширения oauth для разных фреймворков, почему это так?

Мне нужно аутентифицировать пользователей с помощью социальных сетей в среде yii, и я интегрировал расширение youath для yii, чтобы использовать 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 Ответ

4 голосов
/ 06 апреля 2012

В простом случае вы можете использовать таблицу " identity " с полями "* 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);
      ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...