¿Cómo puedo actualizar los registros de usuario al iniciar sesión en CakePHP?

StackOverflow https://stackoverflow.com/questions/824017

  •  05-07-2019
  •  | 
  •  

Pregunta

Soy nuevo en CakePHP y frameworks y he intentado buscar en Google en busca de una respuesta sin suerte.

Estoy usando la función de inicio de sesión en blanco () y quiero poder cambiar los registros de usuario al iniciar sesión (como last_login). ¿Cómo puedo hacer eso?

¿Fue útil?

Solución

Si está utilizando el componente de autenticación de Cake, primero deberá insertar la siguiente línea en su función beforeFilter:

$this->Auth->autoRedirect = false;

Establecer esto en falso permitirá que el siguiente código se ejecute después de que la función de inicio de sesión de CakePHP haya hecho su magia.

En su función de inicio de sesión agregue:

if ($this->Auth->User()) {
$this->User->id = $this->Auth->user('id');
$this->User->saveField('last_login', date('Y-m-d H:i:s'));
}

Nota: asegúrese de tener el campo last_login en su tabla de usuarios y su configuración en fecha y hora.

Otros consejos

Suponiendo que está utilizando el AuthComponent incorporado en su aplicación, debe establecer la siguiente propiedad en su controlador:

$this->Auth->autoRedirect = false;

Esto le permitirá utilizar su función login () (y logout () ) para hacer cosas. La información sobre el usuario actualmente conectado está disponible a través de

$this->Auth->user()

Luego puede usar estos datos para hacer lo que quiera con ese usuario.

Como una autopromoción descarada, le sugiero que eche un vistazo a mi proyecto de código abierto , donde estoy usando esta técnica para crear un "recordarme" cookie.

Creo que puede agregar cosas a la función login (), incluso con autoRedirect establecido en true. He tenido algunos problemas con la redirección implícita (el usuario solicita un recurso restringido, tiene que iniciar sesión y luego es redirigido), así que agregué un código en mi función de inicio de sesión. Parece funcionar bien, y además se llama a la función de inicio de sesión automático.

Yo diría que continúe y agregue algo de lógica para iniciar sesión, vea si funciona para usted.

Un patrón que me gusta es crear un gancho afterLogin () en el modelo de Usuario. Entonces, en su UsersController, cree algo como:

function beforeFilter() {
    $this->Auth->autoRedirect = false;
    parent::beforeFilter();
}

function login() {
    if($this->Auth->User()) {
        if(!$this->User->afterLogin($this->Auth->User())) {
            return $this->logout();
        }

        $this->redirect($this->Auth->redirect());
    }
}

Luego, en el modelo de Usuario, cree:

function afterLogin($User) {
    // perform actions on $User here

    return true; // return false to halt login
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top