我在CakePHP 2.4中遇到了一些麻烦。我烘烤了一个简单的应用程序来创建登录。我做了本书中的所有内容(Auth和Tutorial)。但只有sha1有效。但不是sha256或md5。在搜索和测试之后,我来到了一个解决方案,我必须更改书中的示例代码,现在它可以工作。但我认为,这不是合适的解决方案。仅在sha1中使用CakePHP 2.4进行身份验证?
我的确在AppController中的以下内容:
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
)
)
)
)
);
}
我有MD5,SHA1和SHA256测试这一点。没问题。如果密码被适当地散列,登录就可以工作。
但我注意到,添加一个用户只适用于sha1,因为这是默认的散列。 我的用户模型beforeSafe功能是这样的(从书):
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel {
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['password'])) {
$passwordHasher = new SimplePasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password']
);
}
return true;
}
}
我想,这在AppController中设置就足够了,改变SimplePasswordHasher在这方面了。但就目前来看,这还不够。所以我改成了这样:
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password']
);
这个
$this->data[$this->alias]['password'] = Security::hash(
$this->data[$this->alias]['password'],
'sha256',
true
);
现在一切就像一个魅力。但我的问题:
1)我是对的,这是必要的,或者是我的代码有其他错误?
2)据我所知$xxx->zzz
只适用于控制器和xxx::zzz()
为无处不在,对吗?
3)为什么我必须说安全哈希,它应该再次用sha256散列字符串,当我说已经在AppController中一般?