2011-02-09 47 views
0

我有我的登录查看下面的代码:CakePHP的验证组件空白了密码

<?php 
    echo $session->flash('auth'); 
    echo $this->Form->create('User', array('action' => 'login')); 
    echo $this->Form->input('email'); 
    echo $this->Form->input('password'); 
    echo $this->Form->end('Login'); 
?> 

这将生成以下HTML:

<div id="authMessage" class="message">Login failed. Invalid username or password.</div> 
    <form id="UserLoginForm" method="post" action="/control/users/login" accept-charset="utf-8"> 
     <div style="display: none;"><input name="_method" value="POST" type="hidden"></div> 
     <div class="input text required"> 
     <label for="UserEmail">Email</label> 
     <input name="data[User][email]" maxlength="255" value="" id="UserEmail" type="text"> 
     </div> 
     <div class="input password"> 
     <label for="UserPassword">Password</label> 
     <input name="data[User][password]" id="UserPassword" type="password"> 
     </div> 
     <div class="submit"><input value="Login" type="submit"></div> 
    </form> 

应用程序控制器:

function beforeFilter() 
    { 
     $this->Auth->fields = array (
      'username' => 'email', 
      'password' => 'password' 
     ); 
    } 

当我尝试登录时出现密码不正确的错误。这是$ this-> data的转储:

Array 
(
    [User] => Array 
     (
      [email] => [email protected] 
      [password] => 
     ) 

) 

我在stackoverflow上发现了一些其他类似的问题,但他们都没有看到答案。有谁知道为什么会发生这种情况?

+0

您能否提供表单助手正在生成的HTML? – Stephen 2011-02-09 16:04:54

+0

新增了它,第二个代码块 – Rob 2011-02-09 16:11:02

回答

0

cakePHP验证组件将散列您的密码并尝试与DB中的密码匹配。
他们使用salt对密码进行哈希处理。
如果您设置为MD5,那么
MD5($password.$salt)将与DB中的密码匹配存储。

因此,请确保您存储的密码是正确的。

输入一些虚拟数据。我通常会尝试调试$this->Auth->password($password)然后我将复制结果并插入数据库。

如果密码错误,Auth组件将重置密码字段在内部。为什么你会得到这个结果。

Array 
(
    [User] => Array 
     (
      [email] => [email protected] 
      [password] => 
     ) 

) 

这并不意味着您的密码不可用于使用数据库进行检查。

快乐烘焙