所以,我在我的di中设置了安全组件,就这样......
--services.php--
$di->set('security', function(){
$security = new Phalcon\Security();
//Set the password hashing factor to 11 rounds
$security->setWorkFactor(11);
return $security;
}, true);
--Custom Auth Library (auth.php)--
$user = Users::findFirstByEmail($login);
if ($user) {
if ($this->security->checkHash($password, $user->password)) {
return true;
}
}
return false;
但是,由于某种原因,这总是返回false ...所以,为了调试,我尝试使用PHP的password_verify函数,以下代码直接在我的视图中:
//Returns false
var_dump($this->security->checkHash('password', '$2a$12$aSa7zLEd24zjh2aoUasxd.hbxIm8IQ0/vMf/8p4LTYI3VtZMJ62Pe'));
//Returns True
var_dump(password_verify('password', '$2a$12$aSa7zLEd24zjh2aoUasxd.hbxIm8IQ0/vMf/8p4LTYI3VtZMJ62Pe'));
我缺少什么?
答案 0 :(得分:2)
好的,似乎如果我将哈希值和密码都设置为变量,它会正确解析这两个语句。
我感谢所有的帮助,但这是最终的解决方案。
$password = $pass;
$hash = '$2a$12$lDL2eQ1GLJsJhKgPvU6agOnHpwNSBYPtWHF/O/aTvyISzI.ugjyLC';
var_dump($this->security->checkHash($password, $hash));
var_dump(password_verify($password, $hash));
答案 1 :(得分:1)
这可能与几天前修复的Security::checkHash returns true when using with a non-bcrypt hash有关。
查看代码,问题可能在此块中,您是否可以验证用户模型是否已加载,他的哈希密码也是如此?
$user = Users::findFirstByEmail($login);
if ($user) {
if ($this->security->checkHash($password, $user->password)) {
return true;
}
}
return false;
答案 2 :(得分:1)
如果有人来到这里并且上面的答案都没有帮助,并且你感觉越来越笨,检查用户表中的密码列长度!! 。在我的例子中,它是一个varchar(50),哈希给你60个字符。
执行此操作(上面指出)http://pastebin.com/6tNRgyXg,帮助我意识到代码之外的其他内容是错误的。