Базовая аутентификация CakePHP 2.0 всегда дает перенаправление 302 вместо 401 несанкционированного - PullRequest
3 голосов
/ 14 февраля 2012

У меня установлена ​​базовая аутентификация в простом приложении CakePHP 2.0. Сначала я настроил приложение на использование обычной проверки подлинности с помощью формы, а затем добавил следующую строку в beforeFilter() моего AppController.php, чтобы включить базовую проверку подлинности http:

$this->Auth->authenticate = array('Basic');

Вот полный AppController:

<?php
class AppController extends Controller {

    public $components = array(
            "Session",
            "Auth" => array(
                'loginRedirect' => array('controller'=>'users','action'=>'index'),
                'logoutRedirect' => array('controller'=>'users','action'=>'index'),
                'authError' => "You are not authorized to view this page.",
                'authorize' => array('Controller'),
        )
    );

    public function isAuthorized($user) {
        return true;
    }

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('index','view');
        $this->set('logged_in', $this->Auth->loggedIn());
        $this->set('current_user',$this->Auth->user());
        $this->Auth->authenticate = array('Basic');
    }
}
?>

В идеале мне бы хотелось, чтобы один конкретный контроллер (контроллер, который будет предоставлять API для использования с мобильным устройством) из всего приложения использовал только базовую HTTP-аутентификацию, а остальные контроллеры вели себя как обычный веб применение.

В настоящее время, если я передаю неверные учетные данные контроллеру, я получаю ответ HTTP 302, когда я действительно хочу вернуть HTTP 401. Как я могу это сделать?

* отредактировано для опечатки

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

Я еще не пробовал 2.0, но обычно Auth использует setFlash для установки сообщения об ошибке, а затем перенаправляет вас куда-то, чтобы показать это сообщение.Возможно, именно поэтому вы получаете перенаправление 302.

Как насчет ручной настройки заголовка и последующего выхода?

например,

public function login() {
    if ($this->Auth->login()) {
        return $this->redirect($this->Auth->redirect());
    } else {
        header("HTTP/1.0 401 Unauthorized");
        exit;
    }
}
1 голос
/ 25 августа 2012

В cakePHP 2.x вы можете создать собственный код состояния например,

if ($this->Auth->login()) {
  return $this->redirect($this->Auth->redirect());
} else {
  throw new MissingWidgetHelperException('You are not authorized to view this page.', 401);
}
1 голос
/ 17 февраля 2012
public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('index','view');
    $this->set('logged_in', $this->Auth->loggedIn());
    $this->set('current_user',$this->Auth->user());
    if($this->name == 'Specific') {
            // for the specific controller
            $this->Auth->authenticate = array('Basic');
    } else {
            // everything else
    }
}

оформить заказ Плагин отдыха KVZ может быть интересен https://github.com/kvz/cakephp-rest-plugin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...