Thank you!
But where the question arise:
authenticate($adapter) then saves the identity in the storage and default
storage is session-based storage. This storage accepts only strings, as I
understand. So before the example below can work I should change the storage
too?
Sincerely,
On 4/10/07, Simon Mundy <[EMAIL PROTECTED]> wrote:
Yeah, that example was ~0.7.0 when the Zend_Auth class was still in
incubator and the getIdentity() was separate. Now it's possible to simply
implement the Zend_Auth_Interface in an instance of Zend_Db_Table if you
like and you can remove a couple of steps.
The 'role' property is simply a field within a users table.
E.g. users_list schema:-
CREATE TABLE `user_list` (
`id` int(10) unsigned NOT NULL auto_increment,
`role` enum('guest','member','admin') NULL default 'guest',
`username` varchar(32) default NULL,
`password` varchar(32) default NULL,
`email` varchar(255) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
);
...and then I simply subclass Zend_Db_Table to leverage the identity check
and return an instance of Zend_Db_Table_Row as the 'identity':-
class My_User extends Zend_Db_Table implements Zend_Auth_Adapter_Interface
{
protected $_username;
protected $_password;
protected $_name = 'user_list';
public setUsername($username)
{
$this->_username = $username;
}
public setPassword($password)
{
$this->_password = $password;
}
public authenticate()
{
$authenticated = false;
$messages = array();
$identity = $this->fetchRow($this->_db->quoteInto('username = ?',
$this->_username));
if (!$identity->id) {
$this->_messages[] = 'Your account number is incorrect';
} elseif ($identity->password != md5($this->_password)) {
$this->_messages[] = 'Your password is incorrect';
} else {
$authenticated = true;
}
return new Zend_Auth_Result($authenticated, $identity, $messages);
}
}
...so then your identity check could look like this example (within a
login controller). Yes, I do use this class as the adapter:-
$auth = Zend_Auth::getInstance();
$adapter = new My_User();
$adapter-> setUsername($_POST['username']);
$adapter-> setPassword($_POST['password']);
$result = $auth->authenticate($adapter);
if (!$result->isValid()) {
...show error messages...
} else {
...successful login...
}
Thank you, that clarifies a lot!
However, I would like to know where you changed the identity of Zend_Auth?
E.g. what makes
$this->_auth->getIdentity()->getUser()->role;
possible?
I think that $identity->setUser(...) means that you use some class to
store identity-related information. Do use your own adapter for this?
Does this adapter store identity object into session auth storage and
loads it on next request?
But bootstrap above shows that
// Create auth object
$auth = Zend_Auth::getInstance();
So I need to subclass Zend_Auth to save some user-related information?
--
Simon Mundy | Director | PEPTOLAB
""" " "" """""" "" "" """"""" " "" """"" " """"" " """""" "" "
202/258 Flinders Lane | Melbourne | Victoria | Australia | 3000
Voice +61 (0) 3 9654 4324 | Mobile 0438 046 061 | Fax +61 (0) 3 9654 4124
http://www.peptolab.com
--
Alexander
http://www.alexatnet.com/ - Blog and CMS created with Zend Framework and
Ajax.