Zend Framework: хэш пароля для входа, валидатор электронной почты? - PullRequest
1 голос
/ 11 марта 2011

Я искал и не могу найти правильный ответ, поэтому я надеюсь, что меня укажут в правильном направлении.

Я работаю над входом в систему, мы сохраняем электронную почту, а такжепароль в таблице.Пароль указан в таблице MD5, адрес электронной почты - нет.

Под формой входа в систему:

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.

Я не уверен, должен ли я создать свою собственную проверку валидации или использовать что-то построенное в ZF, о котором я не узнал.

1 Ответ

1 голос
/ 11 марта 2011

Zend предоставляет класс Zend_Auth для выполнения аутентификации пользователя. Вот как я написал свой контроллер:

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;
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...