我为具有“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将密码转换为另一个哈希值?
答案 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
的所有帮助