Cakephp auth登录问题?

时间:2011-03-07 18:51:55

标签: cakephp cakephp-1.3

在我的数据库中,我有用户表,一个记录 - 用户,密码用md5进行哈希。

问题是我每次尝试使用正确的admin / pass登录时都会收到错误的用户/通行证登录信息。

这是我的控制器:

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提前

2 个答案:

答案 0 :(得分:2)

user303832,

您必须通过login, logout$this->Auth->allow(添加到您允许的操作集中。

<强> Edit0: 另一个常见的失败点是省略了密码确认字段,导致先前密码的散列被再次散列并保留在数据库中。 由于密码现在是双线,因此用户无法再登录。它非常常见,它有自己的名称(ninjahash)Ü。

<强> EDIT1: 我深表歉意:请将您的行改回:

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

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

此外,请确保将数据库表配置为使用char(40)作为密码(@haprax:这是本书即使对sha1也是如此)。

答案 1 :(得分:1)

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

因此,解决方案是在实现auth组件后创建一个用途,然后Cake php将以自己的格式创建密码,然后尝试登录。

相关问题