/** * 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; }