我在 CakePHP 2.4 中的身份验证遇到了一些麻烦。我烘焙了一个简单的应用程序来创建登录。我做了书中所有的事情(Auth和Tutorial)。但只有 sha1 有效。但不是 sha256 或 md5。在搜索和测试之后,我找到了一个解决方案,我必须更改书中的示例代码,现在它可以工作了。但我认为,这不是正确的解决方案。
我在 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 中说过?