Esempio n. 1
0
 /**
  * Performs social login.
  * 
  * @param string $provider The name of the social network.
  */
 public function actionSocial($provider)
 {
     if (Yii::app()->hasModule('social') && Yii::app()->hasModule('registration')) {
         /* social and registration modules are loaded */
         Yii::import('application.modules.social.models.*');
         Yii::import('application.modules.social.components.*');
         try {
             $provider_params = array('redirect_uri' => 'http://' . $_SERVER['HTTP_HOST'] . Yii::app()->request->requestUri);
             $p = ProviderManager::getInstance($provider, $provider_params);
             if (isset($p)) {
                 $result = $p->isAuthorized();
                 $user = null;
                 if ($result['success']) {
                     // app authorized
                     if (!isset(Yii::app()->session['registration_user_id'])) {
                         if ($result['registration_required']) {
                             $user = UserHelper::createAccount($result['user_data']['social_email'], null, null, true, false, false);
                             $p->setSession($result['user_data']);
                             $p->storeOauthData($user->id, $result['user_data']);
                         } else {
                             $user = User::model()->findByPk($result['user_id']);
                             $identity = new SocialUserIdentity($result['user_id'], $result['user_data']);
                             $identity->authenticate();
                             $p->storeOauthData($result['user_id'], $result['user_data']);
                         }
                     } else {
                         $user = User::model()->findByPk(Yii::app()->session['registration_user_id']);
                         if (isset($user)) {
                             $p->setSession($result['user_data']);
                             $p->storeOauthData($user->id, $result['user_data']);
                         }
                     }
                     $p->pullData($result['user_data']['social_oauth_id'], $result['user_data']['social_oauth_token'], $user);
                     if (isset(Yii::app()->session['registration_user_id'])) {
                         $this->redirect(Yii::app()->createUrl('registration'));
                     } else {
                         if ($result['registration_required']) {
                             $this->redirect(Yii::app()->createUrl('registration'));
                         } else {
                             $this->redirect(Yii::app()->baseUrl);
                         }
                     }
                 } else {
                     // app not authorized
                     $this->redirect($result['url']);
                 }
             }
         } catch (Exception $ex) {
             $this->redirect(Yii::app()->createUrl('users'));
         }
     } else {
         /* modules are not loaded */
         $this->redirect(Yii::app()->createUrl('users'));
     }
 }
 /**
  * 
  * @param unknown $model
  * @return boolean
  */
 protected function performBasicRegistration($model)
 {
     $output = false;
     if (isset($model)) {
         $email = isset($model->email) ? $model->email : null;
         if (isset($email)) {
             if (isset(Yii::app()->session['social_email'])) {
                 $this->_user = UserHelper::createAccount($email, $model->nickname, $model->password, true, true, true, Yii::app()->session['social_email']);
             } else {
                 $this->_user = UserHelper::createAccount($email, $model->nickname, $model->password);
             }
             Yii::app()->session['registration_user_id'] = $this->_user->id;
             Yii::app()->session['registration_user_email'] = $email;
             $output = isset($this->_user->id);
         }
     }
     return $output;
 }