/** * Log in using a Google account. */ public function actionGoogleLogin() { $this->layout = '//layouts/login'; $model = new LoginForm(); $model->useCaptcha = false; // echo var_dump(Session::getOnlineUsers()); if (Yii::app()->user->isInitialized && !Yii::app()->user->isGuest) { $this->redirect(Yii::app()->homeUrl); return; } require_once 'protected/components/GoogleAuthenticator.php'; $auth = new GoogleAuthenticator(); if (Yii::app()->settings->googleIntegration && ($token = $auth->getAccessToken())) { try { $user = $auth->getUserInfo($token); $email = filter_var($user->email, FILTER_SANITIZE_EMAIL); $profileRecord = X2Model::model('Profile')->findByAttributes(array('googleId' => $email)); if (!isset($profileRecord)) { $userRecord = X2Model::model('User')->findByAttributes(array('emailAddress' => $email)); $profileRecord = X2Model::model('Profile')->findByAttributes(array(), "emailAddress=:email OR googleId=:email", array(':email' => $email)); } if (isset($userRecord) || isset($profileRecord)) { if (!isset($profileRecord)) { $profileRecord = X2Model::model('Profile')->findByPk($userRecord->id); } $auth->storeCredentials($profileRecord->id, $_SESSION['access_token']); } if (isset($userRecord) || isset($profileRecord)) { if (!isset($userRecord)) { $userRecord = User::model()->findByPk($profileRecord->id); } $username = $userRecord->username; $password = $userRecord->password; $model->username = $username; $model->password = $password; if ($model->login(true)) { $ip = $this->getRealIp(); Session::cleanUpSessions(); if (isset($_SESSION['sessionId'])) { $sessionId = $_SESSION['sessionId']; } else { $sessionId = $_SESSION['sessionId'] = session_id(); } $session = X2Model::model('Session')->findByPk($sessionId); // if this client has already tried to log in, increment their attempt count if ($session === null) { $session = new Session(); $session->id = $sessionId; $session->user = $model->getSessionUsername(); $session->lastUpdated = time(); $session->status = 1; $session->IP = $ip; } else { $session->lastUpdated = time(); } // x2base::cleanUpSessions(); // $session = X2Model::model('Session')->findByAttributes(array('user'=>$userRecord->username,'IP'=>$ip)); // if(isset($session)) { // $session->lastUpdated = time(); // } else { // $session = new Session; // $session->user = $model->username; // $session->lastUpdated = time(); // $session->status = 1; // $session->IP = $ip; // } $session->save(); SessionLog::logSession($userRecord->username, $sessionId, 'googleLogin'); $userRecord->login = time(); $userRecord->save(); Yii::app()->session['versionCheck'] = true; Yii::app()->session['loginTime'] = time(); $session->status = 1; if (Yii::app()->user->returnUrl == 'site/index') { $this->redirect(array('/site/index')); } else { $this->redirect(Yii::app()->user->returnUrl); } } } else { $this->render('googleLogin', array('failure' => 'email', 'email' => $email)); } } catch (Google_AuthException $e) { $auth->flushCredentials(); $auth->setErrors($e->getMessage()); $this->render('googleLogin', array('failure' => $auth->getErrors())); } catch (NoUserIdException $e) { $auth->flushCredentials(); $auth->setErrors($e->getMessage()); $this->render('googleLogin', array('failure' => $auth->getErrors())); } } else { $this->render('googleLogin'); } }