Esempio n. 1
0
 public function actionLogin()
 {
     $service = Yii::app()->request->getQuery('service');
     if (isset($service)) {
         $authIdentity = Yii::app()->eauth->getIdentity($service);
         $authIdentity->redirectUrl = Yii::app()->user->returnUrl;
         $authIdentity->cancelUrl = $this->createAbsoluteUrl('/social/social/login/');
         if ($authIdentity->authenticate()) {
             $identity = new ServiceUserIdentity($authIdentity);
             // successful authentication
             if ($identity->authenticate()) {
                 //проверить нет ли этого пользователя
                 $socialLogin = new SocialLoginIdentity(Yii::app()->user->getState('service'), Yii::app()->user->getState('id'));
                 if ($socialLogin->authenticate()) {
                     Yii::app()->user->login($identity);
                     Yii::app()->user->setFlash(YFlashMessages::NOTICE_MESSAGE, Yii::t('user', 'Вы успешно авторизовались!'));
                     $this->redirect(array(Yii::app()->getModule('user')->loginSuccess));
                 } else {
                     // пользователь новый, необходимо сделать редирект на форму окончания регистрации
                     Yii::app()->user->setFlash(YFlashMessages::NOTICE_MESSAGE, Yii::t('user', 'Пожалуйста, завершите регистрацию!'));
                     $this->redirect(array('/social/social/registration/'));
                 }
                 // special redirect with closing popup window
                 $authIdentity->redirect();
             } else {
                 // close popup window and redirect to cancelUrl
                 $authIdentity->cancel();
             }
         }
         // Something went wrong, redirect to login page
         $this->redirect(array('/social/social/login/'));
     }
 }
Esempio n. 2
0
 public function actionRegistration()
 {
     $id = Yii::app()->user->getState('sid');
     $name = Yii::app()->user->getState('name');
     $service = Yii::app()->user->getState('service');
     if (!isset($id, $name, $service)) {
         Yii::app()->user->setFlash(YFlashMessages::ERROR_MESSAGE, Yii::t('social', 'При авторизации произошла ошибка!'));
         $this->redirect(array('/user/account/login'));
     }
     $model = new User();
     if (Yii::app()->request->isPostRequest && !empty($_POST['User'])) {
         $nick_name = $_POST['User']['nick_name'];
         $transaction = Yii::app()->db->beginTransaction();
         try {
             $model->createAccount($nick_name, "{$nick_name}@{$nick_name}.ru", null, null, User::STATUS_ACTIVE);
             if ($model && !$model->hasErrors()) {
                 //создадим запись в Login
                 $login = new Login();
                 $login->setAttributes(array('user_id' => $model->id, 'identity_id' => Yii::app()->user->getState('sid'), 'type' => Yii::app()->user->getState('service')));
                 if (!$login->save()) {
                     throw new CDbException(Yii::t('social', 'При создании учетной записи произошла ошибка!'));
                 }
                 $transaction->commit();
             } else {
                 throw new CDbException(Yii::t('social', 'При создании учетной записи произошла ошибка!'));
             }
             // авторизуем нового пользователя
             $socialLogin = new SocialLoginIdentity(Yii::app()->user->getState('service'), Yii::app()->user->getState('sid'));
             if ($socialLogin->authenticate()) {
                 $this->cleanState();
                 Yii::app()->user->login($socialLogin);
                 Yii::app()->user->setFlash(YFlashMessages::NOTICE_MESSAGE, Yii::t('social', 'Вы успешно авторизовались!'));
                 $this->redirect(array(Yii::app()->getModule('user')->loginSuccess));
             } else {
                 Yii::app()->user->setFlash(YFlashMessages::ERROR_MESSAGE, Yii::t('social', 'При авторизации произошла ошибка!'));
                 $this->cleanState();
                 $this->redirect(array('/user/account/login'));
             }
         } catch (Exception $e) {
             $transaction->rollback();
             $this->cleanState();
             Yii::log(Yii::t('social', "При авторизации через {servive} произошла ошибка!", array('{servive}' => Yii::app()->user->getState('service'))), CLogger::LEVEL_ERROR);
             Yii::app()->user->setFlash(YFlashMessages::ERROR_MESSAGE, Yii::t('social', 'При создании учетной записи произошла ошибка!'));
             $this->redirect(array('/user/account/login'));
         }
     }
     $this->render('registration', array('model' => $model));
 }