示例#1
0
 public static function get()
 {
     return CrugeUtil::factory();
 }
示例#2
0
 protected function restoreFromCookie()
 {
     // invocada cuando allowAutoLogin es true.
     // 1. Cuando se invoca a login() y allowAutoLogin es true y
     // ($duration > 0), se invoca a saveToCookie guardando
     // alli el ID del usuario.
     // 2. Se recuperara el ID del usuario, luego
     // se buscara el objeto CrugeSession que tenga asignado,
     // el mas nuevo, y se revalida a ver si no ha caducado,
     // para finalmente reasignarlo a la autenticacion.
     // 3. Si la sesion del usuario en CrugeSession ha caducado
     // o ha sido cerrada por el administrador entonces
     // el usuario debera iniciar sesion manualmente nuevamente.
     $app = Yii::app();
     $request = $app->getRequest();
     $cookie = $request->getCookies()->itemAt($this->getStateKeyPrefix());
     if ($cookie && !empty($cookie->value) && is_string($cookie->value) && ($data = $app->getSecurityManager()->validateData($cookie->value)) !== false) {
         // el valor de la cookie es seguro
         $data = @unserialize($data);
         if (is_array($data) && isset($data[0], $data[1], $data[2], $data[3])) {
             list($id, $name, $duration, $states) = $data;
             // echo "--data es: id={$id},name={$name}, duration={$duration}--";
             $factory = CrugeUtil::factory();
             $_crugeuser = $factory->getICrugeStoredUserLoadModel($id);
             // si _crugeuser es null hay exception y no continuara.
             if ($this->beforeLogin($id, $states, true)) {
                 $this->changeIdentity($id, $name, $states);
                 // esto solo vuelve a darle vida a la cookie por mas tiempo
                 if ($this->autoRenewCookie) {
                     $cookie->expire = time() + $duration;
                     $request->getCookies()->add($cookie->name, $cookie);
                 }
                 // busca la ultima sesion cruge, reutilizandola, no crea
                 // ninguna nueva, solo reutiliza.
                 $_crugesession = $factory->getICrugeSessionFindLastByUser($id);
                 if ($_crugesession != null) {
                     $this->setSessionId($_crugesession->primarykey);
                     $this->afterLogin(true);
                 } else {
                     //	las credenciales estan aun en cookie, validas, pero
                     //	el usuario de cruge (al que hace referencia) ya no
                     //  tiene una Sesion valida dentro del sistema.
                 }
             }
         }
     } else {
         // las credenciales almacenadas han caducado
     }
 }