Piotr
Krajewski
web application
programmer
Temat: Zend_auth - autentykacja za pomocą e-mail bądz login
Witam wszystkich,mam sobie taki kawałek kodu potrzebnego do logowania userów w serwisie:
if ($this->getRequest()->isPost())
{
if ($form->isValid($this->_request->getPost()))
{
$data = $form->getValues();
$auth = Zend_Auth::getInstance();
$dbUser = new Model_DbTable_User();
$userMapper = new Model_UserMapper();
$userData = $userMapper->findByUsername($data['email']);
if ('0' == $userData->status)
{
$this->_helper->FlashMessenger(array('error' => 'Twoje konto jest nie aktywne! Aktywuj konto po przez link w e-mailu aktywacyjnym! <a href="'.$this->view->url(array(), 'activationCode', true).'?q='.$userData->single_access_token.'" title="Wyślij ponownie kod aktywacyjny">Wyślij ponownie kod aktywacyjny</a>'));
}
else
{
$authAdapter = new Zend_Auth_Adapter_DbTable($dbUser->getAdapter(), 'users');
$authAdapter->setIdentityColumn('email')->setCredentialColumn('password');
$authAdapter->setIdentity(htmlspecialchars($data['email']))->setCredential($dbUser->generatePassword($data['password'], $data['email']));
$authAdapter->setCredentialTreatment("? AND status = '".$userData->status."'");
$result = $auth->authenticate($authAdapter);
if ($result->isValid())
{
$user = new Model_User(array('id' => $userData->id, 'role' => 1, 'last_login_date' => new Zend_Db_Expr('NOW()')));
$userMapper->save($user);
$user = null;
$auth->getStorage()->write($authAdapter->getResultRowObject());
if (!$userData->update_date)
{
$returnUrl = $this->view->url(array(), 'changeProfile', true);
}
else
{
$returnUrl = $this->view->url(array(), 'profile', true);
if (isset($session->referer))
{
$returnUrl = $session->referer;
}
unset($session->referer);
}
$this->_redirect($returnUrl);
}
else
{
$this->_helper->FlashMessenger(array('error' => 'Wpisany został niepoprawny login lub hasło'));
}
}
$this->_redirect($this->view->url(array(), 'signin', true));
}
}
mój problem leży w autentykacji usera za pomocą logina LUB e-maila jako nazwy użytkownika. Obecnie jest jedynie za pomocą e-maila:
$authAdapter->setIdentity(htmlspecialchars($data['email']))->setCredential($dbUser->generatePassword($data['password'], $data['email']));
moje pytanie brzmi: jak dodać do tego możliwość logowania za pomocą loginu?