Zend Framework:登录密码哈希,电子邮件验证器? [英] Zend Framework: Login password hash, email validator?
问题描述
我已经搜索了并且找不到正确的答案,所以希望我能指出正确的方向.
I have searched and can not find the right answer, so I'm hoping I can be pointed in the right direction.
我正在登录,我们正在将电子邮件和密码存储在表中.密码在表中是MD5,电子邮件不是.
I'm working on a login, we are storing the email as well as password in a table. Password is MD5'ed in the table, email is not.
在登录"表单下:
class Application_Form_Login extends Zend_Form
{
public function init()
{
$this->setName('signupForm');
$this->setMethod('post');
$this->setAction('/User/Login');
$id = new Zend_Form_Element_Hidden('id');
$id->addFilter('Int');
$emailAddress = new Zend_Form_Element_Text('emailAddress');
$emailAddress->setLabel('Email Address')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty')
->addValidator('EmailAddress');
$password = new Zend_Form_Element_Password('password');
$password->setLabel('Password:')
->addValidator('StringLength', false, array(6,24))
->setLabel('Password')
->setRequired(true);
$submit = new Zend_Form_Element_Submit('Login');
$submit->setAttrib('id', 'submitbutton');
$this->addElements(array($id, $emailAddress,$password,$submit));
}
}
我需要基于两个元素(电子邮件和密码)检查数据库,在与数据库进行比较之前,我还需要使用MD5处理密码.我应该如何在ZF中进行此操作.
I need to check the DB based on two elements (email and password), I also need to process the password with MD5 before comparing it to the DB. How should I go about this in ZF.
我不确定是否应该构造自己的验证检查,还是使用我尚未了解的ZF中内置的东西.
I'm not sure if I should construct my own validation check, or use something built within ZF that I have not learned about.
推荐答案
Zend提供了Zend_Auth类,用于执行用户身份验证.这是我编写控制器的方式:
Zend provides the Zend_Auth class for performing user authentication. Here's how I wrote my controller:
public function indexAction () {
$this->view->vars['form'] = new Form_User_Login();
if ($this->request->isPost()) {
$login = $this->request->getPost('userLogin','');
$password = $this->request->getPost('userPassword','');
if ($this->view->vars['form']->isValid(array('userLogin' => $login,'userPassword' => $password))) {
$authAdapter = new Zend_Auth_Adapter_DbTable(
Zend_Db_Table::getDefaultAdapter(),
'user',
'login',
'password'
);
$authAdapter->setIdentity($login)->setCredential(md5($password));
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
$auth->getStorage()->write($authAdapter->getResultRowObject(null,'password'));
$this->flash->addMessage(array('success' => $this->view->translate('Hello, %1$s',$auth->getIdentity()->login)));
$userModel = new Model_User();
$userModel->update(array('last_access' => new Zend_Db_Expr('CURRENT_TIMESTAMP')),"login = '$login'");
$this->_redirect();
} else {
switch ($result->getCode()) {
case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
$this->view->vars['messages'][] = array('error' => $this->view->translate('User name not found.'));
break;
case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
$this->view->vars['messages'][] = array('error' => $this->view->translate('Invalid password.'));
break;
default:
$this->view->vars['messages'][] = array('error' => $this->view->translate('Failed to log in.'));
break;
}
}
}
}
}
这篇关于Zend Framework:登录密码哈希,电子邮件验证器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!