tutorial isauthorized datos configurar component cakephp3 auth allow cakephp cakephp-2.0

isauthorized - find auth cakephp



cakephp 2.0 ¿cómo actualizar datos de autenticación? (6)

cuando actualizo datos en el modelo de Usuario, los datos de Auth no se actualizan.

¿Cómo puedo "actualizar" los datos devueltos por $ this-> Auth-> user () cuando estoy actualizando el modelo de usuario?

y no quiero usar

$ this-> Auth-> login ($ data);

después de actualizar mi tabla de usuario


Creo que la forma más simple de hacer esto es:

$user = $this->Auth->user(); $user[''attribute''] = $newValue; $this->Auth->setUser($user);


Creo que la respuesta de func0der es buena, pero puede mejorarse:

protected function renewLogin() { if(!empty($this->Auth->user())) { $this->loadModel(''User''); $this->User->contain(false); $user = $this->User->read(null, $this->Auth->user(''id''))[''User'']; unset($user[''password'']); $this->Auth->login($user); } }

Puede agregar esto a su AppController.php y usarlo desde cualquier controlador después de modificar el usuario conectado.

Creo que es mucho más limpio y, aunque implica el acceso a la base de datos, creo que no se ejecutará con la frecuencia suficiente como para ser un problema.

SIEMPRE debe intentar hacer las cosas de la manera "Torta". Y evite atajos como editar una variable de sesión. Te facilitará las cosas a largo plazo.

Por favor comenta y agrega tus opiniones :)


Escriba los datos actualizados en la Sesión, por ejemplo:

$this->Session->write(''Auth.User'', $data);

Antes de CakePHP 2.x no puede hacer esto en el modelo sin romper el diseño del marco.

Con CakePHP 2.x puede cargar el componente de sesión de los modelos y actualizarlo.


La respuesta evert0ns es correcta. Pero debe usar AuthComponent :: login (), porque los datos también se guardan en el AuthComponent y no se extraen de la sesión cada vez.

Tuve el problema hace solo un par de días.

// AppController.php /** * Renews current user data, e.g. in case of an email address change while being logged in. * * @param array $newUserData * @return void */ protected function renewUserSession($newUserData){ if(!isset($newUserData) || empty($newUserData)){ return; } // We need to fetch the current user data so custom indexes are copied $currentUserData = $this->Auth->user(); if(!isset($currentUserData) || empty($currentUserData)){ return; } // Merge old with new data $newUserData = array_merge($currentUserData, $newUserData); // Login with new data $this->Auth->login($newUserData); }

Fuente: mi pasta

Pon esto en tu AppController. El método está especializado para combinar los datos de usuario actuales y nuevos para mantener los índices personalizados existentes que haya proporcionado. Necesitaba esto, pero puedes dejarlo fuera sin embargo. Proporcione los datos de usuario actualizados como un parámetro para el método. No en el modelo encontrar formulario. P.ej:

$data = array( ''User'' => array( ''username'' => ''bla'', ''passwort'' => ''fu'', ''email'' => ''[email protected]'' ) ); // Wrong $this->renewUserSession($data); // Right $this->renewUserSession($data[''User'']);


Probé la siguiente línea. Sus trabajos me forman bien Después de modificar los datos del usuario escribí la siguiente línea

$this->Session->write(''Auth'', $this->User->read(null, $this->Auth->User(''id'')));


afterSave este problema usando la función afterSave en User Model. Funciona bien si actualizamos el modelo de usuario desde cualquier área. Mi código era el siguiente:

class User extends AppModel { ... ... ... public function afterSave($created, $options = array()){ parent::afterSave($created,$options); //updating authentication session App::uses(''CakeSession'', ''Model/Datasource''); CakeSession::write(''Auth'',$this->findById(AuthComponent::user(''id''))); return true; } ... ... ... }