0

我为具有“用户名”和“密码”的用户提供了一个 mongo db 结构。我正在尝试在 cakephp 登录中使用 Auth,但它似乎对我不起作用。我尝试删除 $this->data 但仍然无效。

我的密码使用 Security::hash($this->data['User']['password'])

if(!empty($this->data))
{
   if($this->Auth->login($this->data))
   {
       echo "yes";
   }
   else{
       echo "no";
   }
}

在我的应用程序控制器中,我有这个:

public $components = array('DebugKit.Toolbar', 'Session', 'Auth' => array(
    'loginAction' => array(
        'controller' => 'pages',
        'action' => 'home'
    ),
    'authenticate' => array(
        'Form' => array(
            'fields' => array('username' => 'username', 'password' => 'password')
        )
    )
));

这是我调试登录方法时的结果:

array(
    'User' => array(
        'password' => '*****',
        'username' => 'test@test.com',
        'remember' => '0',
        'auto_login' => '0'
)
)

我不知道为什么我不能将 Auth 与 mongodb 一起使用。我在这里先向您的帮助表示感谢。

编辑:

当我尝试取消布局时,它会在页面底部显示一个查询:

db.users.find( {"username":"test@test.com","password":"2fdf49ffc396453960802df8fc2417655d1e8fca"}, [] ).sort( [] ).limit( 1 ).skip( 0 )

我从表单中输入的密码的哈希值与正在查询的哈希值不同。哈希值应为“a2374c309ab7823dcd9b4e21dae7511f7a9c7ec5”。为什么 cakephp 将密码转换为另一个哈希值?

4

2 回答 2

1

有两种使用方式$this->Auth->login()。CakePHP API文档对此进行了解释:

如果提供了 $user,则数据将作为登录用户存储。如果 $user 为空或未指定,则请求将用于识别用户。

手册还提到:

在 2.0 中 $this->Auth->login($this->request->data) 将使用发布的任何数据登录用户...

所以对于用户控制器的登录方法,你不应该传递任何东西:

if($this->Auth->login()) {
    // user is now logged in
}

如果您需要手动登录用户,您可以将用户数据作为数组传递:

if($this->Auth->login($this->request->data['User'])) {
    // user is now logged in
}

$this->request->data['User']类似的东西在哪里:

array(
    'id' => 1,
    'username' => 'admin',
    'password' => '1234',
);

注意:在这两种情况下,您都不需要散列密码,因为它是自动完成的。

于 2013-05-09T16:45:34.043 回答
1

我能够找到答案。这是因为 cakephp 在数据库中搜索时会自动对密码进行哈希处理。

我遇到的问题是当我保存用户密码时,我正在使用

Security::hash($this->data['User']['password'])

我应该改用这个:

AuthComponent::password($this->data['User']['password'])

感谢您提供的所有帮助,尤其是对@xgalvin

于 2013-05-09T17:22:20.183 回答