如何在使用mongodb的cakephp中使用Auth

时间:2013-05-09 16:07:52

标签: php mongodb cakephp cakephp-2.3

我为具有“username”和“password”的用户提供了mongo db结构。我试图在cakephp登录中使用Auth,但似乎它对我不起作用。我尝试删除$ this->数据,但它仍无效。

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

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

在我的app控制器中,我有这个:

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'
)
)

我不知道为什么我不能使用Autong和mongodb。感谢您的帮助。

编辑:

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

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

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

2 个答案:

答案 0 :(得分:1)

使用$this->Auth->login()有两种方法。 CakePHP API documentation解释了它:

  

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

manual也提到:

  

在2.0 $ this-> Auth->登录($ 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',
);

注意:在这两种情况下,您都不需要自动哈希密码。

答案 1 :(得分:1)

我能够找到答案。这是因为cakephp在数据库中搜索时会自动散列密码。

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

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

我应该使用这个:

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

感谢您对@xgalvin

的所有帮助