私の目標は、すべてのユーザーにConfigure::read('Security.salt')
を使用するのではなく、各ユーザーに固有の塩を持たせることです。CakePHP 2:AuthComponentの「パスワード」メソッドをオーバーライド
私はCakePHP 2.xがパスワードを自動的にハッシュしないことを知っています。これにより、パスワードのモデル検証を行うことができます。これは非常にうれしいことです。しかし、AuthComponentの「パスワード」メソッドをオーバーライドできる方法はありません。したがって、パスワードをデータベースに保存する前にパスワードをハッシュする方法を制御することはできますが、実際のログインを実行する際にパスワードがハッシュされる方法を制御することはできません。料理本から:
$this->Auth->login()
を呼び出す前にパスワードをハッシュする必要はありません。
$this->Auth->login()
はパスワードハッシュのカスタムメソッドを使用するために何ができますか?
ありがとうございました。
UPDATE:私はdrハンニバルレクターの答え(カスタム認証オブジェクトの作成)に行きました。ここでそれを行う方法は次のとおりです。
旧コード:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
新しいコード(変化する "フォーム" を "カスタム"):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
の作成「アプリ/コントローラ/コンポーネント/認証/ CustomAuthenticate.phpは "と、それは次のようになります
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class CustomAuthenticate extends FormAuthenticate {
}
コピー "のlib /ケーキ/コントローラ/ COM _findUser" と "_password" からメソッド" ponent/Auth/BaseAuthenticate.php "を開き、" CustomAuthenticate "クラスに貼り付けます。そして、 "_findUser" メソッドに次の2つの変更を行います。 "$条件" 配列からこの行を削除し
:
if (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {
に変更
if (empty($result) || empty($result[$model])) {
$model . '.' . $fields['password'] => $this->_password($password),
を次に作ります「_パスワード」メソッドの次の2つの変更点があります。
と同じロジックで
Security::hash
を使用するAuthComponent::password
のすべてのオカレンスを更新し、最後に
return Security::hash($password, null, Configure::read('Security.salt') . $id);
に
return Security::hash($password, null, true);
を変更することにより、
protected function _password($password) {
更新
protected function _password($password, $id) {
への塩の値を変更することによって、「$ ID」パラメータを作成します。上記。
それは働いた!私は関連するコードで私の質問を更新しました。ありがとう! – Nick