cakephp: аутентификация пользовательского объекта аутентификации не вызывается

Метод аутентификации в пользовательском объекте аутентификации никогда не вызывается. Это глюк или я что-то пропустил?

У меня ничего не появляется в журнале, меня просто перенаправляют на пользователей/логин (или тот, который я указал)

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() ), они будут вызваны, однако, поэтому, по крайней мере, я знаю, что торт находит класс и так далее. Он просто пропускает метод аутентификации.

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 Адаптер аутентификации LdapAuthorize не найден, но проблема была в опечатках.


person Kristoffer Darj    schedule 07.11.2013    source источник
comment
Не могли бы вы также показать действие входа в систему ваших контроллеров? Очень похоже, что проблема именно в этом.   -  person ndm    schedule 07.11.2013
comment
Вы совершенно правы, сэр. Я ошибочно полагал, что аутентификация вызывается всякий раз, когда незарегистрированный пользователь пытается получить доступ к чему-то, что требует аутентификации. Но, как вы говорите, $this->Auth->login() вызывает аутентификацию. Вместо этого я сосредоточусь на getUser()   -  person Kristoffer Darj    schedule 07.11.2013


Ответы (1)


Я ошибочно полагал, что аутентификация вызывается всякий раз, когда неаутентифицированный пользователь пытается получить доступ к чему-то, защищенному Auth.

Как указал ndm, аутентификация вызывается только при выполнении $this->Auth->login()

То, что я пытаюсь здесь сделать, это позволить пользователям входить в систему по ссылке, но не без сохранения состояния. Им не нужно предоставлять один и тот же хэш (в моем случае) каждый раз, только один раз. Вместо этого я установлю состояние (сеанс) в методе getUser(), который вызывается каждый раз, когда пользователь пытается получить доступ к чему-то защищенному.

Так что, надеюсь, это может помочь любому, у кого есть такая же проблема.

person Kristoffer Darj    schedule 07.11.2013