/**
  * Sigin
  *
  * @param  Docrtine_Record $user
  * @return void
  */
 public function signIn(sfOpenAuthUser $user)
 {
     if (!$user->getId()) {
         throw new Exception(__METHOD__ . ": Expected user exists");
     }
     $this->_user = $user;
     $this->setAttribute('user_id', $user->getId(), 'open_auth');
     $this->setAuthenticated(true);
     $this->clearCredentials();
 }
 /**
  * Verification success: authenticate or create user
  *
  * @param  string                     $uid  - Identity
  * @param  Zend_OpenId_Extension_Sreg $sreg
  * @return void
  */
 public function verifiedCallback($uid, Zend_OpenId_Extension_Sreg $sreg)
 {
     $user = Doctrine::getTable('sfOpenAuthUser')->findOneBy('identity', $uid);
     if (!$user) {
         $user = new sfOpenAuthUser();
         $user->setIdentity($uid);
         $props = $sreg->getProperties();
         if (!empty($props['fullname'])) {
             $user->setName($props['fullname']);
         }
         if (!empty($props['email'])) {
             $user->setEmail($props['email']);
         }
     }
     $user->setDateTimeObject('last_login', new DateTime());
     $user->save();
     $authUser = $this->getUser();
     $authUser->signIn($user);
     // remember
     // remove old keys
     $ttl = sfConfig::get('app_open_auth_remember_ttl');
     $q = Doctrine::getTable('sfOpenAuthRememberKey')->clean($user, $ttl);
     // save key
     $rk = new sfOpenAuthRememberKey();
     $rk->setUser($user);
     $rk->setIpAddress($_SERVER['REMOTE_ADDR']);
     $rk->setRememberKey(sfOpenAuthRememberKey::generateRandomKey());
     $rk->save();
     // make key as a cookie
     $this->getResponse()->setCookie(sfConfig::get('app_open_auth_remember_cookie'), $rk->getRememberKey(), time() + $ttl);
     $this->dispatcher->notifyUntil(new sfEvent($this, 'app.auth.success'));
     $this->redirect(sfConfig::get('app_open_auth_redirect_signin'));
 }
 /**
  * Удалить просроченные все просроченные ключи и ключи указанного пользователя
  *
  * @param  sfOpenAuthUser $user - Пользователь, чьи ключи надо удалить
  * @param  int            $ttl  - Время жизни ключа, сек
  * @return void
  */
 public function clean(sfOpenAuthUser $user, $ttl)
 {
     $expireDate = date('Y-m-d', TIME - $ttl);
     Doctrine_Query::create()->delete('sfOpenAuthRememberKey k')->andWhere('k.created_at > ?', $expireDate)->orWhere('k.user_id = ?', $user->getId())->execute();
 }