私はスケーラブルなシステムを作るためにcakephp 3でダイジェスト認証を使用しようとしました。クライアントは必要なときにのみパスワードを要求されますが、入力された詳細はアクセスを許可しません。代わりに、資格情報を要求するダイアログボックスが再びポップアップします。どんなアドバイスや助けも大歓迎です!Cakephp 3ダイジェスト認証
のAppController ::初期化()
$this->loadComponent('Auth', [
'authenticate' => [
'Digest' => [
'fields' => ['username' => 'username', 'password' => 'password_hash'],
'userModel' => 'Users',
'finder' => 'auth'
],
],
'authError' => 'incorrect username or password',
'storage' => 'Memory',
'unauthorizedRedirect' => false
]);
UsersTable:
public function beforeSave(\Cake\Event\Event $event)
{
$entity = $event->data['entity'];
// Make a password for digest auth.
$entity->password_hash = DigestAuthenticate::password(
$entity->username,
$entity->plain_password,
env('SERVER_NAME')
);
$entity->created = Time::now();
return true;
}
public function findAuth(\Cake\ORM\Query $query, array $options)
{
$query
->select(['id', 'username', 'password_hash']);
return $query;
}
編集:私はダイジェストのgetUser関数(Function code)と出力掘り下げることに決めたエンティティ
から削除コードいくつかのデータが私の許可されていないページに入るので、何が起こっているか見ることができます。
$Password: 8a3575d301f04f08dd461f93e3d55a21
$digest[username]: James
$digest['response']: 4fa261678c753da8e78e4bf98057fd72
$hash: a627c3e68061937e454c321d55e986d3
$request->env('ORIGINAL_REQUEST_METHOD'): GET
私はちょうど私がdigesthash値を変更するために必要なパスワードを知っているだろうと、私はsetUsernameからこれを行うことができますどのように考えています! –
私は自分のデータベースをクリアして、これをもう一度テストしましたが、残念ながらまだ動作していません。私は一貫してデータベース内の同じハッシュを取得することができますが、正しい資格情報が提供されている場合、認証にハッシュが一致しないようです。何か案は? –