예제 #1
0
 private function whenEntering()
 {
     //или выполняем вход
     try {
         $user = new Model_User($_POST);
         $_SESSION['USER'] = $user;
         echo 'Вы выполнили вход под именем "' . $user->getName() . '"';
     } catch (ErrorException $e) {
         echo $e->getMessage();
     }
 }
예제 #2
0
 /**
  * Store the user's profile data in the database, if it doesn't exist yet.
  * @param Zend_Oauth_Token_Access $accesstoken
  * @return Void
  */
 protected function _getUserData(Zend_Service_Twitter $twitterService, $twitterUserId)
 {
     $twitterUserData = $twitterService->users->show($twitterUserId);
     $userColumns = $this->_mapProperties((array) $twitterUserData->toValue());
     $userModel = new Model_User();
     $userConditions = $userModel->select()->from($userModel->getName(), $this->_getSessionColumns());
     $model = new Model_AuthTwitter();
     $model->bindModel('Model_User', array('conditions' => $userConditions, 'rule' => 'User'));
     $userData = $model->fetchRow($model->select()->where('twitter_uid = ?', $twitterUserId));
     if (!$userData || !$userData->Model_User) {
         $userData = $model->createNew($twitterUserId, $userColumns);
     } else {
         $model->getObserver('Authenticatable')->updateLoginStats($userData->user_id);
         $userData = $userData->Model_User;
     }
     return $userData;
 }
예제 #3
0
 protected function _getUserData($accessToken)
 {
     $profileData = $this->_getLinkedInInstance()->get(self::LINKED_IN_PROFILE_QUERY);
     $newUserData = $this->_mapProperties($profileData);
     $userModel = new Model_User();
     $userConditions = $userModel->select()->from($userModel->getName(), $this->_getSessionColumns());
     $model = new Model_AuthLinkedin();
     $model->bindModel('Model_User', array('conditions' => $userConditions, 'rule' => 'User'));
     $userData = $model->fetchRow($model->select()->where('linkedin_uid = ?', $profileData['id']));
     if (!$userData || !$userData->Model_User) {
         $userData = $model->createNew($profileData['id'], $newUserData)->toArray();
         // Make sure only the session columns remain
         $userData = array_intersect_key($userData, array_fill_keys($this->_getSessionColumns(), null));
     } else {
         $model->getObserver('Authenticatable')->updateLoginStats($userData->user_id);
         $userData = $userData->Model_User;
     }
     return $userData;
 }
예제 #4
0
 /**
  * Store the user's profile data in the database, if it doesn't exist yet.
  * @param String $id The openid
  * @param Array $props The properties fetched thru Sreg
  * @return Void
  */
 protected function _getUserData($id, array $props)
 {
     $ini = Zend_Registry::get('config');
     $sessionColumns = Zend_Db_Select::SQL_WILDCARD;
     if (!empty($ini->auth->login->sessionColumns)) {
         $sessionColumns = $ini->auth->login->sessionColumns;
         $sessionColumns = explode(',', $sessionColumns);
     }
     $userModel = new Model_User();
     $userConditions = $userModel->select()->from($userModel->getName(), $sessionColumns);
     $model = new Model_AuthOpenId();
     $model->bindModel('Model_User', array('conditions' => $userConditions));
     $userData = $model->fetchRow($model->select()->where('openid = ?', $id));
     if (!$userData || !$userData->Model_User) {
         $userData = $model->createNew($id, $this->_mapProperties($props));
     } else {
         $model->getObserver('Authenticatable')->updateLoginStats($userData->user_id);
         $userData = $userData->Model_User;
     }
     return $userData->getPrimaryKey();
 }
예제 #5
0
 protected function _getPasswordlessModel()
 {
     $authPwlessModel = new Model_AuthPasswordless();
     $userModel = new Model_User();
     $userConditions = $userModel->select()->from($userModel->getName(), Garp_Auth::getInstance()->getSessionColumns());
     $authPwlessModel->bindModel('Model_User', array('conditions' => $userConditions, 'rule' => 'User'));
     return $authPwlessModel;
 }
예제 #6
0
 /**
  * Store the user's profile data in the database, if it doesn't exist yet.
  * @param Array $facebookData The profile data received from Facebook
  * @return Void
  */
 protected function _getUserData(array $facebookData)
 {
     $uid = $facebookData['id'];
     $ini = Zend_Registry::get('config');
     $sessionColumns = Zend_Db_Select::SQL_WILDCARD;
     if (!empty($ini->auth->login->sessionColumns)) {
         $sessionColumns = $ini->auth->login->sessionColumns;
         $sessionColumns = explode(',', $sessionColumns);
     }
     $userModel = new Model_User();
     $userConditions = $userModel->select()->from($userModel->getName(), $sessionColumns);
     $model = new Model_AuthFacebook();
     $model->bindModel('Model_User', array('conditions' => $userConditions, 'rule' => 'User'));
     $userData = $model->fetchRow($model->select()->where('facebook_uid = ?', $uid));
     if (!$userData || !$userData->Model_User) {
         $userData = $model->createNew(array('facebook_uid' => $uid, 'access_token' => $facebookData['access_token']), $this->_mapProperties($facebookData));
     } else {
         $model->getObserver('Authenticatable')->updateLoginStats($userData->user_id, array('access_token' => $facebookData['access_token']));
         $userData = $userData->Model_User;
     }
     return $userData;
 }
예제 #7
0
 /**
  * Store the user's profile data in the database, if it doesn't exist yet.
  * @param Zend_Oauth_Token_Access $accessToken
  * @return Void
  */
 protected function _getUserData(Zend_Oauth_Token_Access $accessToken)
 {
     $authVars = $this->_getAuthVars();
     $token = $accessToken->getToken();
     $tokenSecret = $accessToken->getTokenSecret();
     $vimeoService = new Garp_Service_Vimeo_Pro($authVars->consumerKey, $authVars->consumerSecret, $token, $tokenSecret);
     $userDataFromVimeo = $vimeoService->people->getInfo($token);
     $id = $userDataFromVimeo['id'];
     $ini = Zend_Registry::get('config');
     $sessionColumns = Zend_Db_Select::SQL_WILDCARD;
     if (!empty($ini->auth->login->sessionColumns)) {
         $sessionColumns = $ini->auth->login->sessionColumns;
         $sessionColumns = explode(',', $sessionColumns);
     }
     $userModel = new Model_User();
     $userConditions = $userModel->select()->from($userModel->getName(), $sessionColumns);
     $model = new Model_AuthVimeo();
     $model->bindModel('Model_User', array('conditions' => $userConditions));
     $userData = $model->fetchRow($model->select()->where('vimeo_id = ?', $id));
     if (!$userData || !$userData->Model_User) {
         $userData = $model->createNew($id, $accessToken, $this->_mapProperties($userDataFromVimeo));
     } else {
         $model->getObserver('Authenticatable')->updateLoginStats($userData->user_id);
         $userData = $userData->Model_User;
     }
     return $userData;
 }
예제 #8
0
 /**
  * Find friends of logged in user and map to local friends table.
  * @param Array $config
  * @return Bool Success
  */
 public function mapFriends(array $config)
 {
     $config = $config instanceof Garp_Util_Configuration ? $config : new Garp_Util_Configuration($config);
     $config->obligate('bindingModel')->obligate('user_id')->setDefault('accessToken', $this->getAccessToken());
     if (!$config['accessToken']) {
         // Find the auth record
         $authModel = new Model_AuthFacebook();
         $authRow = $authModel->fetchRow($authModel->select()->where('user_id = ?', $config['user_id']));
         if (!$authRow || !$authRow->access_token) {
             return false;
         }
         // Use the stored access token to create a user session. Me() in the FQL ahead will contain the user's Facebook ID.
         // Note that the access token is available for a very limited time. Chances are it's not valid anymore.
         $accessToken = $authRow->access_token;
     }
     try {
         $this->_client->setAccessToken($config['accessToken']);
         // Find the friends' Facebook UIDs
         $friends = $this->_client->api(array('method' => 'fql.query', 'query' => 'SELECT uid2 FROM friend WHERE uid1 = me()'));
         // Find local user records
         $userModel = new Model_User();
         $userTable = $userModel->getName();
         $authFbModel = new Model_AuthFacebook();
         $authFbTable = $authFbModel->getName();
         $fbIds = '';
         $friendCount = count($friends);
         foreach ($friends as $i => $friend) {
             $fbIds .= $userModel->getAdapter()->quote($friend['uid2']);
             if ($i < $friendCount - 1) {
                 $fbIds .= ',';
             }
         }
         $friendQuery = $userModel->select()->setIntegrityCheck(false)->from($userTable, array('id'))->join($authFbTable, $authFbTable . '.user_id = ' . $userTable . '.id', array())->where('facebook_uid IN (' . $fbIds . ')')->order($userTable . '.id');
         $localUsers = $userModel->fetchAll($friendQuery);
         $localUserCount = count($localUsers);
         // Insert new friendships into binding model
         $bindingModel = new $config['bindingModel']();
         $insertSql = 'INSERT IGNORE INTO ' . $bindingModel->getName() . ' (user1_id, user2_id) VALUES ';
         foreach ($localUsers as $i => $localUser) {
             $insertSql .= '(' . $localUser->id . ',' . $config['user_id'] . '),';
             $insertSql .= '(' . $config['user_id'] . ',' . $localUser->id . ')';
             if ($i < $localUserCount - 1) {
                 $insertSql .= ',';
             }
         }
         $result = $bindingModel->getAdapter()->query($insertSql);
         // Clear cache manually, since the table isn't updated thru conventional paths.
         Garp_Cache_Manager::purge($bindingModel);
         return !!$result;
     } catch (Exception $e) {
         return false;
     }
 }