Отключить аутентификацию для данного действия в том же контроллере

#php #cakephp #authentication #hadoop #php-5.4

#php #cakephp #аутентификация #hadoop #php-5.4

Вопрос:

У меня есть следующий фрагмент кода в моем контроллере:

 public function beforeFilter() {
    $this->autoRender = false;
    ...
    $this->Auth->allow('email');
}

public function email() {
    ...
    $this->show();
    ...
}

public function show() {
    ...
}
  

Моему show действию требуется аутентификация, но email нет.

email Действие означает принятие уведомления jobEndNotifier о завершении моего задания hadoop, поэтому я не могу пройти аутентификацию на этой странице, поскольку она будет посещена hadoop. ( https://hadoop.apache.org/docs/r1.2.1/api/org/apache/hadoop/mapred/JobEndNotifier.html )

Мое show действие в основном генерирует и визуализирует отчеты для завершенного задания hadoop, и когда моя работа завершится, я хочу автоматически сгенерировать их (кэшировать) в системе, поэтому позже, когда пользователь посетит страницу, она будет загружена из кэша и будет намного быстрее. Именно по этой причине я вызываю show действие из email действия.

Конечно, я могу получить доступ к email действию без входа в систему по умолчанию, но когда я вызываю show действие из email него, оно перенаправляет меня на домашнюю страницу с сообщением, что вы должны войти в систему.

Итак, вкратце: могу ли я установить, что если я вызываю show действие из своего email действия, ему не потребуется аутентификация? Поскольку страница не отображается, выполняется только вычисление.

Заранее спасибо.

Комментарии:

1. Какую ошибку вы получаете с кодом в вопросе? Из того, что вы описываете, код show должен быть в модели, которая вызывается обоими действиями контроллера. Однако это будет работать так, как описано, что, вероятно, означает, что вы смотрите на ошибку и делаете ложное предположение. it will redirect me to the home page saying you have to be logged in. <- что это перенаправляет? Это не компонент аутентификации.

2. Да, спасибо, что указали на это. Сначала я подумал, что это «автоматическое» перенаправление из-за компонента аутентификации, поскольку для show действия необходима аутентификация, но нет, это был я, проверив другие условия, которые не удалось выполнить. Теперь это работает, спасибо.

Ответ №1:

Согласно вашей логике, $this-> Auth-> разрешить (’email’); чтобы обойти аутентификацию для метода электронной почты,

Таким же образом вы можете настроить обход показа из функции электронной почты, например

 public function beforeFilter() {
$this->autoRender = false;
...
$this->Auth->allow('email');
}

public function email() {
...
$this->Auth->allow('show'); /* allow show here **/
$this->show();
...
}

 public function show() {
  ...
}
  

Комментарии:

1. Почему вы думаете, что это повлияет на что-либо?