2016-08-11 24 views
3

Cakephp 3.1の認証コンポーネントを使用してダイジェスト認証を作成しようとしていますが、問題が発生しました。私は以下のコードを使用しています。私は、以前のポップアップで正しいユーザー名とパスワードを入力した直後にポップアップするHTTP認証ポップアップを持っています。私がキャンセルを押すと、Cake \ Auth \ BasicAuthenticate-> unauthenticatedと表示されます。CakePHP 3のダイジェスト認証

私が間違っていることを教えてもらえますか?私は、デバッグ・キット環境をチェックインすると、クライアントの一部

public function digest(){ 
    $http = new Client(); 
    $response = $http->get('http://localhost/project/api/v1/users/view/22', [], [ 
     'auth' => [ 
      'type' => 'digest', 
      'username' => 'Digest', 
      'password' => 'my_password', 
     ] 
    ]); 

でAppController.php

$this->loadComponent('Auth', [ 
     'authorize' => 'Controller', 
     'loginRedirect' => [ 
      'controller' => 'Users', 
      'action' => 'index' 
     ], 
     'authenticate' => [ 
      'Digest' => [ 
       'fields' => ['username' => 'username', 'password' => 'digest_hash'], 
       'userModel' => 'Users', 
      ], 
     ], 
     'loginAction' => [ 
      'controller' => 'Users', 
      'action' => 'login', 
     ], 
     'storage' => 'Memory', 
     'unauthorizedRedirect' => false 
    ]); 

UserTable.php

public function beforeSave(Event $event) 
{ 
    $entity = $event->data['entity']; 

    // Make a password for digest auth. 
    $entity->digest_hash = DigestAuthenticate::password(
     $entity->username, 
     $entity->plain_password, 
     env('SCRIPT_NAME') 
    ); 
    return true; 
} 

、私はこれを持っている:

PHP_AUTH_DIGEST  username="Digest", realm="localhost", nonce="57ac3609a5b79", uri="/project/api/v1/users/view/22", response="af0e1fe455aa7f1475df715ef5231b56", opaque="421aa90e079fa326b6494f812ad13e79", qop=auth, nc=00000001, cnonce="0bb461453700ebc1" 

答えて

1

これは遅すぎるかもしれませんが、まだ誰かに役立つでしょう!

よく使用$this->Auth->unauthorizedRedirect = false,です。有効なユーザー名とパスワードを送信しない限り、AuthComponentはForbiddenExceptionをスローします。 例外は別のページにリダイレクトされます。

正しく登録を取得します:

明らかに登録/追加し、ユーザの可能ダイジェスト認証を行うために正しいパスワードを消化することが重要です。

public function beforeSave(Event $event) 
    { 
    $entity = $event->data['entity']; 

    // Make a password for digest auth. 
    $entity->digest_hash = DigestAuthenticate::password(
     $entity->username, 
     $entity->plain_password, 
     env('SERVER_NAME') 
    ); 
    return true; 
    } 

しかし、我々は、上記の変数/用語について注意する必要があります:

documentationで述べたように、私たちはUsersTable.phpで、一般的に以下のコードを追加してハッシュされたパスワードを消化追加することができます

1. $entity->digest_hash (this should be equivalent to the field you have made to 
    save password, eg. password_hash) 

2. $entity->username (this should be equivalent to the field you have made to 
    save username, eg. email) 

3. $entity->plain_password (again this should be equivalent to the field you have made to 
    save password, eg. password_hash) 

4. env('SERVER_NAME') (this is third parameter for making digest password, 
    "SERVER_NAME" is default value and we can left it this way.) 

結論として、電子メール(ユーザー名用)とpassword_hash(パスワード用)がある場合、上記の機能は次のようになります。

public function beforeSave(Event $event) 
{ 
    $entity = $event->data['entity']; 

    // Make a password for digest auth. 
    $entity->password_hash= DigestAuthenticate::password(
    $entity->email, 
    $entity->password_hash, 
    env('SERVER_NAME') 
); 
    return true; 
} 

私が上記のことに集中している理由は、それらが間違いの可能性があるからです。

関連する問題