私の目標は、すべてのユーザーに使用するのではなく、ユーザーごとに固有のソルトを用意するConfigure::read('Security.salt')
ことです。
CakePHP2.xがパスワードを自動的にハッシュしなくなったことを私は知っています。これにより、パスワードのモデル検証を実行できます。これは非常に便利です。ただし、AuthComponentの「パスワード」メソッドをオーバーライドする方法がわかりません。そのため、データベースに保存する前にパスワードをハッシュする方法を制御することはできますが、実際のログインを実行するときにパスワードをハッシュする方法を制御することはできません。クックブックから:
を呼び出す前にパスワードをハッシュする必要はありません
$this->Auth->login()
。
$this->Auth->login()
パスワードハッシュのカスタムメソッドを使用するにはどうすればよいですか?
ありがとう。
更新:私はハンニバル・レクター博士の答え(カスタム認証オブジェクトの作成)に行き着きました。方法は次のとおりです。
古いコード:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
新しいコード(「フォーム」を「カスタム」に変更):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
「app/Controller / Component / Auth / CustomAuthenticate.php」を作成し、次のようにします。
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class CustomAuthenticate extends FormAuthenticate {
}
「lib/Cake / Controller / Component / Auth / BaseAuthenticate.php」から「_findUser」メソッドと「_password」メソッドをコピーして、「CustomAuthenticate」クラスに貼り付けます。次に、「_findUser」メソッドに次の2つの変更を加えます。
「$conditions」配列から次の行を削除します。
$model . '.' . $fields['password'] => $this->_password($password),
if (empty($result) || empty($result[$model])) {
に変更if (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {
次に、「_password」メソッドに次の2つの変更を加えます。
protected function _password($password) {
次のように変更して、「$id」パラメータを作成しますprotected function _password($password, $id) {
return Security::hash($password, null, true);
に変更してソルト値を更新しますreturn Security::hash($password, null, Configure::read('Security.salt') . $id);
最後に、のすべてのオカレンスを更新して、上記と同じロジックでAuthComponent::password
使用します。Security::hash