2011-03-07 104 views
1

在我的数据库中有用户表,并且有一个记录 - 用户,密码用md5散列。Cakephp auth登录问题?

问题是我每次尝试使用正确的管理员/密码登录时我得到不好的用户/密码登录信息。

这里是我的控制器:

class UsersController extends AppController { 

    var $name = 'Users'; 

    function beforeFilter() { 
     parent::beforeFilter(); 
     $this->Auth->allow(array('*')); 
    } 



    function login() { 
      //debug($this->data); 
      if ($this->Session->read('Auth.User')) { 
      $this->Session->setFlash('You are logged in!');     
     } 
    } 

    function logout() { 
     $this->redirect($this->Auth->logout()); 
    } 
} 

和appControler

class AppController extends Controller { 

    var $components = array('Auth', 'Session'); 

    function beforeFilter() { 
     //debug($this->data); 
     //Security::setHash('md5'); 
     $this->Auth->allow('admin_index', 'index', 'login', 'logout'); 
     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'index'); 
     $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'logout'); 
     $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'index'); 
    } 

} 

login.ctp:

<div class="login"> 
    <? 
    $session->flash('auth'); 
    echo $form->create('User', array('action' => 'login')); 
    echo $form->inputs(array('legend' => __('Login', true), 'username', 'password')); 
    echo $form->end('Login'); 
    ?> 
</div> 

,这里是来自app_controller

Array 
(
    [User] => Array 
     (
      [username] => admin 
      [password] => pass 
     ) 

) 
调试味精从用户控制器

和调试消息:

Array 
(
    [User] => Array 
     (
      [username] => admin 
      [password] => 8e2665a3fe6983fa38464685ac4a3d9c93a3d301 
    //this is not empty anymore but it is not same as in database 
     ) 

) 

这里是SQL代码,这是好的,但用户密码散列是错误的。

SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`email`, `User`.`created` FROM `users` AS `User` WHERE `User`.`username` = 'admin' AND `User`.`password` = '09b98f2308740bf305ce1e1097d02ded' LIMIT 1 

可能是什么问题?我是cakephp中的新人。 TNX提前

+0

edit1为你添加。 – benjamin 2011-03-07 19:22:20

+1

忘记旧帖子,如果您坚持使用默认值,则不必手动进行散列。你为什么要使用md5? sha1是默认的(iirc),更安全。 – benjamin 2011-03-07 19:27:44

+0

重写编辑1更易于使用 – benjamin 2011-03-07 19:45:27

回答

2

user303832,

您通过$this->Auth->allow(login, logout添加到您的组所允许的行动。

Edit0: 失败的另一个常见的一点是,确认密码字段省略,导致以前的密码再次被哈希散列和持久化到数据库。 由于密码现在被双重哈希,用户不能再登录。它很常见,它有自己的名字(ninjahash)。

EDIT1: 我深深的歉意:请改变你的行回:

$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 

$this->Auth->logoutRedirect = array('controller' => 'users','action' => 'login'); 

另外,请确保您的数据库表被配置为采取一个char (40)作为密码(@haprax:这是本书对sha1的暗示)。

+0

tnx @benjamin回应,我编辑我的代码有问题,确定如何修复ninjahash :))) – user147 2011-03-07 19:17:43

+0

我试试这个,但没有帮助,它再次发送给我登录页面http://techpub.wordpress.com/2007/11/25/how-to-password-hashing-in-cakephp/ – user147 2011-03-07 19:19:08

1

不要尝试使用任何其他格式的散列,因为cakephp没有提及散列的任何特定格式。据我说,Cakephp根据安全性来转换它。我们在cakephp的cofig文件中改变了的值和解密值。

所以,解决方案是在创建auth组件后使用,然后Cake php会以自己的格式创建密码,然后尝试登录。

+0

tnx for answer,会记住这一点 – user147 2011-03-09 20:54:54