2

カスタム認証オブジェクトのメソッド authenticate は呼び出されません。これはグリッチですか、それとも何か不足していますか?

ログに何も記録されません。ユーザー/ログイン (または指定したもの) にリダイレクトされるだけです。

Cakeバージョン: 2.4.1

<?php
//My custom Auth Class
//Path: app/Controller/Component/Auth/HashAuthenticate.php
App::uses('BaseAuthenticate', 'Controller/Component/Auth');

class HashAuthenticate extends BaseAuthenticate
{
    public function authenticate(CakeRequest $request, CakeResponse $response)
    {
        //Seems to not be called
        CakeLog::write('authenticate');
        debug($this);
        die('gaah');
    }
}

メソッド getUser() (または unauthenticated() ) を追加すると、それらが呼び出されるので、少なくとも Cake がクラスなどを見つけることがわかります。認証メソッドをスキップするだけです。

AppController は次のようになります。

<?php
// AppController
App::uses('Controller', 'Controller');
App::uses('HashAuthenticate', 'Controller/Component/Auth'); 

class AppController extends Controller {

    public $helpers = array('Html', 'Form', 'Session');
    public $components =    array('Auth' => array(
        'authenticate' => array('Hash'),
        'authorize'      => array('Controller'),
        )
    );
}

私はここで同様の質問を見つけました: CakePHP 2.x custom "Authentication adapter "LdapAuthorize" was not found but there the issue was typos.

4

1 に答える 1

1

私は、認証されていないユーザーが Auth によって保護されているものにアクセスしようとするたびに、authenticate が呼び出されると誤って考えていました。

ndmが指摘したように、認証は実行時にのみ呼び出されます$this->Auth->login()

ここで達成しようとしているのは、ユーザーがリンク経由でログインできるようにすることですが、ステートレスな方法ではありません。毎回同じハッシュ (私の場合) を提供する必要はなく、1 回だけです。代わりに、ユーザーが保護対象にアクセスしようとするたびに呼び出される getUser() メソッドで状態 (セッション) を設定します。

うまくいけば、これは同じ問題を抱えている他の誰かを助けることができます.

于 2013-11-07T17:30:29.803 に答える