Updating Zend_Auth_Storage after edit users profil

2020-07-23 05:22发布

I have following situation: I have loged user, standard authentication with DB table

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

When user edits his profile, I save it into Db, but I need to update also storage (using standard Zend_Auth_Storage_Session). Is there any easy way how to do it? Many thanks.

3条回答
Emotional °昔
2楼-- · 2020-07-23 05:29
$user = Zend_Auth::getInstance()->getIdentity();
$user->newValue = 'new value';

Assuming you are updating the session data in the same statement you are updating the database in there is no need to call the db again.

查看更多
贪生不怕死
3楼-- · 2020-07-23 05:47

Your best bet would be to not use Zend_Auth's storage to hold information that's likely to change - by default it only holds the identity (for good reason). I'd probably make a User class that wrapped all the Auth, ACL (and probably profile) functionality that uses a static get_current() method to load the user stashed in the session. This bypasses all the consistency issues you run into when stuffing it into the session as well as giving you a single point from which to implement caching if/when you actually need the performance boost.

查看更多
▲ chillily
4楼-- · 2020-07-23 05:53

I have done it like this, it works, but I don't know if there is not some better way,how to do it

$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);  
查看更多
登录 后发表回答