0

私はスケーラブルなシステムを作るために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 

答えて

1

私は本当にばかげたミスを犯しました。 変更:

$entity->password_hash = DigestAuthenticate::password(
    $entity->username, 
    $entity->password_hash, // was plain_password which was not in my model! 
    env('SERVER_NAME') 
); 
1

エンティティから_setPassword関数を削除するだけです。パスワードはハッシュされ、後でこのハッシュは必要な平文の代わりにDigestAuthenticationで使用されます。

私がさらにリファクタリングや削除、パスワードの作成をbeforeSaveから、あなたが今passwordHasherで行ったものと同様の実体にそれを置く... は覚えておいてくださいと思います、あなたは_setUsername にダイジェストを更新する必要があり、この場合、_setPassword!

+0

私はちょうど私がdigesthash値を変更するために必要なパスワードを知っているだろうと、私はsetUsernameからこれを行うことができますどのように考えています! –

+0

私は自分のデータベースをクリアして、これをもう一度テストしましたが、残念ながらまだ動作していません。私は一貫してデータベース内の同じハッシュを取得することができますが、正しい資格情報が提供されている場合、認証にハッシュが一致しないようです。何か案は? –

関連する問題