Php Zend Framework上的错误身份验证失败

Php Zend Framework上的错误身份验证失败,php,zend-framework,web,zend-db,Php,Zend Framework,Web,Zend Db,我想知道怎么做 我有一个问题的登录表单,其中包含登录名和密码,我收到一个错误,无法识别 class Admin_IndexController extends Zend_Controller_Action { private $_form; public function init() { $this->_helper->layout->setLayout('login'); $this-&g

我想知道怎么做 我有一个问题的登录表单,其中包含登录名和密码,我收到一个错误,无法识别

class Admin_IndexController extends Zend_Controller_Action
{
    private $_form;
    public function init()
    {
                $this->_helper->layout->setLayout('login');
               $this->_form = new Admin_Forms_IdentificationAdmin();
        $this->view->form = $this->_form;
    }
public function indexAction()
{
   if($this->_request->isPost())
   {
           $formLoginAdmin = $this->getRequest()->getPost();
           if($this->_form->isValid($formLoginAdmin))
           {
               if(empty($formLoginAdmin['loginAd']) || empty($formLoginAdmin['password']) )
            {                        
                echo json_encode(array(
                    'valid' => false,
                    'error' => "Erreur dans les identifiants"
                ));
                exit();
            } 
        /**
         * User method static loginByEmail
         * 
         */
        if(Admin_Models_UserTools::loginByEmail($formLoginAdmin['loginAd'], $formLoginAdmin['password']))
        {
            if(intval(Admin_Models_UserTools::getRankByEmailUser($formLoginAdmin['loginAd'])->rankUser) == Admin_Models_UserTools::LEVEL_ADMINISTRATOR
                || intval(Admin_Models_UserTools::getRankByEmailUser($formLoginAdmin['loginAd'])->rankUser) == Admin_Models_UserTools::LEVEL_SUPER_ADMINISTRATOR)
            {
                echo json_encode(array(
                    'valid' => true,
                    'redirect' => 'general'
                ));
                exit();
            }else{
                echo json_encode(array(
                    'valid' => false,
                    'error' => "Vous n'avez pas les droits d'accès"
                ));
                exit();
            }
        }                
        echo json_encode(array(
            'valid' => false,
            'error' => "Echec de l'identification"
        ));
        exit();                
       }else{
        echo json_encode(array(
            'valid' => false,
            'error' => "Le formulaire n'est pas valide"
        ));
        exit();
    }


  }
}
请参见下面application.ini中的my code DB

  ; Base de donnée
resources.db.adapter                    = PDO_MYSQL
resources.db.params.charset                = UTF8
resources.db.params.host                = localhost
resources.db.params.username            = root
resources.db.params.password            = 
resources.db.params.dbname                = web_development
resources.db.isDefaultTableAdapter        = true
对于管理员(Models)和用户工具(UserTools)

public static function loginByEmail($email, $password)
{
    if(empty($email) || empty($password))
    {
        throw new Zend_Exception( self::ERROR_INVALID_FIELDS_USER );
    }else{
        $validator = new Zend_Validate_EmailAddress();
        if(!$validator->isValid($email))
        {
            throw  new Zend_Exception( ERROR_INVALID_EMAIL );
        }   
    }       
    /**
     * Get Instance dbAdapter
     */
    $dbadapter = Zend_Db_Table::getDefaultAdapter();

    /**             
     * Create e auth adapter
     */
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbadapter);
    $authAdapter->setTableName(self::TABLE_USER)
                    ->setIdentityColumn(self::ROW_EMAIL)
                    ->setCredentialColumn(self::ROW_PASSWORD)
                    ->setCredentialTreatment('SHA1(?)')
                    ->setIdentity($email)
                    ->setCredential($password);
    /**
     * Create an object "session"
     */
    $auth = Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_Session(self::getNamespaceSession(self::getRankByEmailUser($email))));
    $result = $auth->authenticate($authAdapter);

    if($result->isValid())
    {
        /**
         * Create data user in session without passwordUser
         */
        $dataUser = $authAdapter->getResultRowObject(null, self::ROW_PASSWORD);
        $auth->getStorage()->write($dataUser);
        $session = new Zend_Session_Namespace('config');
        $session->emailAsk = $email;
        return true;
    }
    return false;
}
所以在Mysql中我有两个字段:emailUser和passwordUser

const ROW_PASSWORD                  = 'passwordUser';
const ROW_EMAIL                     = 'emailUser';
public static function getSessionUser()
{
    $sessionAsk = new Zend_Session_Namespace('config');
    $emailAsk = $sessionAsk->emailAsk; 
    if(isset($emailAsk))
    {
        return Zend_Auth::getInstance()->
                    setStorage(
                        new Zend_Auth_Storage_Session(Admin_Models_UserTools::getNamespaceSession
                                (Admin_Models_UserTools::getRankByEmailUser($emailAsk))));
    }                                                   
    return false;   
}
我不懂这个代码,我想这就是问题所在

 <script type="text/javascript">
$(function(){
    $('.deleteUser').click(function(){
        var idU = $(this).attr('rel');  
        if(confirm("<?=$this->translate('Are you sure you delete this user');?> (id: "+idU+" ) ?")){

            var data = {
                    listId : idU
            }; 

            $.ajax({
                url: 'user-management/deleteuser',
                dataType: 'json',
                type: 'POST',
                data: data,
                success: function(data, textStatus, XMLHttpRequest)
                {
                    if(data.response)
                    {
                        $('#listUser').removeBlockMessages().blockMessage(data.message, {type: 'success'});
                        upContent('userManagement/index/','');
                    }else{
                        $('#listUser').removeBlockMessages().blockMessage(data.errorMessage, {type: 'error'});
                    }
                },
                error: function(XMLHttpRequest, textStatus, errorThrown)
                {
                    // Message
                    $('#listUser').removeBlockMessages().blockMessage('<?=$this->translate('Connection to server failed, please try again');?>'  + '<br/>', {type: 'error'});
                }
            });
        }
    });

$(函数(){
$('.deleteUser')。单击(函数(){
var idU=$(this.attr('rel');
如果(确认(“(id:+idU+”)){
风险值数据={
列表ID:idU
}; 
$.ajax({
url:“用户管理/deleteuser”,
数据类型:“json”,
键入:“POST”,
数据:数据,
成功:函数(数据、textStatus、XMLHttpRequest)
{
if(data.response)
{
$('#listUser').removeBlockMessages().blockMessage(data.message,{type:'success'});
upContent('userManagement/index/','');
}否则{
$('#listUser').removeBlockMessages().blockMessage(data.errorMessage,{type:'error'});
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown)
{
//信息
$('#listUser').removeBlockMessages().BlockMessages(''+'
',{type:'error'}); } }); } });
我使用firebug进行调试,我在帖子中给出了以下答案:

<!-- example login script -->
<script type="text/javascript">

    $(document).ready(function()
    {
        // We'll catch form submission to do it in AJAX, but this works also with JS disabled
        $('#login-form').submit(function(event)
        {
            // Stop full page load
            event.preventDefault();

            // Check fields
            var login = $('#login').val();
            var pass = $('#password').val();

            if (!login || login.length == 0)
            {
                $('#login-block').removeBlockMessages().blockMessage('Veuillez entrer votre identifiant', {type: 'warning'});
            }
            else if (!pass || pass.length == 0)
            {
                $('#login-block').removeBlockMessages().blockMessage('Le mot de passe est obligatoire', {type: 'warning'});
            }
            else
            {
                var submitBt = $(this).find('button[type=submit]');
                submitBt.disableBt();

                // Request
                var data = {                        
                    loginAd: login,
                    password: pass
                };
                var redirect = '/en/admin/general/';
                if (redirect.length > 0)                    

                // Start timer
                var sendTimer = new Date().getTime();

                // Send
                $.ajax({
                    url: '/en/admin/', 
                    dataType: 'json',
                    type: 'POST',
                    data: data,
                    success: function(data, textStatus, XMLHttpRequest)
                    {
                        if (data.valid) 
                        {
                            document.location.href = '/en/admin/general/';                          
                        }
                        else
                        {
                            // Message
                            $('#login-block').removeBlockMessages().blockMessage(data.error || 'Il y a eu une erreur dans les identifiants, veuillez réessayer', {type: 'error'});
                            submitBt.enableBt();
                        }
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown)
                    {
                        // Message
                        $('#login-block').removeBlockMessages().blockMessage('Connexion au serveur échouée, veuillez réessayer <br/>', {type: 'error'});

                        submitBt.enableBt();
                    }
                });

                // Message
                $('#login-block').removeBlockMessages().blockMessage('Identification en cours, veuillez patienter', {type: 'loading'});
            }
        });
    });

</script>

$(文档).ready(函数()
{
//我们将捕获表单提交以在AJAX中完成它,但这也适用于禁用JS的情况
$(“#登录表单”).submit(函数(事件)
{
//停止整页加载
event.preventDefault();
//检查字段
var login=$('#login').val();
var pass=$('#password').val();
如果(!login | | login.length==0)
{
$(“#登录块”).removeBlockMessages().blockMessage('Veuillez Enter votre Identification',{type:'warning'});
}
如果(!pass | | pass.length==0),则为else
{
$(“#登录块”).removeBlockMessages().blockMessage('Le mot de passe est obligatoire',{type:'warning'});
}
其他的
{
var submitBt=$(this.find('button[type=submit]');
submitBt.disableBt();
//请求
变量数据={
登录:登录,
密码:pass
};
var redirect='/en/admin/general/';
如果(redirect.length>0)
//启动计时器
var sendTimer=new Date().getTime();
//发送
$.ajax({
url:“/en/admin/”,
数据类型:“json”,
键入:“POST”,
数据:数据,
成功:函数(数据、textStatus、XMLHttpRequest)
{
if(data.valid)
{
document.location.href='/en/admin/general/';
}
其他的
{
//信息
$(“#登录块”).removeBlockMessages().blockMessage(data.error | |'Il y a eu une erreur dans les identifications,veuillez réessayer',{type:'error'});
submitBt.enableBt();
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown)
{
//信息
$(“#登录块”).removeBlockMessages().blockMessage('Connexion au serveuréchouée,veuillez réessayer
,{type:'error'}); submitBt.enableBt(); } }); //信息 $(“#登录块”).removeBlockMessages().blockMessage('Identification en cours,veuillez patienter',{type:'loading'}); } }); });

我也有这个错误

韦耶勒·雷塞尔服务关系


感谢您的大力帮助

Admin\u Models\u UserTools::LoginByMail($formLoginAdmin['loginAd',$formLoginAdmin['password'])失败感谢您@Mattgerry我更新了我的帖子您能看到我的函数LoginByMail吗提前感谢我认为您的密码没有正确加密(您是否正确使用了salt?),或者可能是设置存储行出了问题。每个列组的名称空间不同?我不确定,但这可能是问题所在。我看不出其他任何错误。我使用的密码是:d033e22ae348aeb5660fc2140aec35850c4da997,我在daba base中有,这封电子邮件也有admin@webe.com,谢谢你的帮助,我能做什么你是在什么时候想出这个密码的?你是刚刚输入了这个密码,还是用了盐?