php zend-framework authentication zend-auth

php - Actualizando Zend_Auth_Storage después de editar el perfil de los usuarios



zend-framework authentication (3)

Tengo la siguiente situación: he activado el usuario, la autenticación estándar con la tabla DB

$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter()); $authAdapter->setTableName(''users''); $authAdapter->setIdentityColumn(''user_name''); $authAdapter->setCredentialColumn(''password'');

Cuando el usuario edita su perfil, lo guardo en Db, pero también necesito actualizar el almacenamiento (usando Zend_Auth_Storage_Session estándar). ¿Hay alguna manera fácil de hacerlo? Muchas gracias.


Lo he hecho así, funciona, pero no sé si no hay una forma mejor, cómo hacerlo

$user_data = User::getUser($user_id)->toArray(); unset($user_data[''password'']); $std_user = new stdClass(); foreach ($user_data as $key => $value) { $std_user->$key = $value; } $auth = Zend_Auth::getInstance(); $auth->getStorage()->write($std_user);


Su mejor opción sería no usar el almacenamiento de Zend_Auth para guardar información que probablemente cambie; de ​​manera predeterminada, solo conserva la identidad (por una buena razón). Probablemente creara una clase de usuario que cubriera todas las funciones Auth, ACL (y probablemente perfil) que usa un método estático get_current () para cargar al usuario escondido en la sesión. Esto pasa por alto todos los problemas de coherencia con los que se tropieza cuando lo rellena en la sesión y le proporciona un punto único desde el cual implementar el almacenamiento en caché si / cuando realmente necesita el aumento de rendimiento.


$user = Zend_Auth::getInstance()->getIdentity(); $user->newValue = ''new value'';

Suponiendo que está actualizando los datos de la sesión en la misma declaración, está actualizando la base de datos, ya que no es necesario volver a llamar a la base de datos.