Корень вашей проблемы, вероятно, в вашем методе isAuthorized (). Это должно просто возвращать true или false и указывать, авторизован ли аутентифицированный пользователь для доступа к определенному действию.
Трудно сказать, почему вы будете перенаправлены на домашнюю страницу вместо страницы входа. Но возможно, что у вас есть другой код где-то, что все портит.
Попробуйте изменить код, как показано ниже, и посмотрите, не поможет ли это сделать:
app_controller.php
<?php
class AppController extends Controller {
var $components = array('Session', 'Auth' => array(
'loginAction' => array('controller'=>'users','action'=>'login', 'admin'=>false),
'logoutRedirect' => array('controller'=>'users','action'=>'logout'),
'loginRedirect' => array('controller'=>'shows', 'action'=>'index'),
'autoRedirect' => false,
'authorize' => 'controller'
);
function beforeFilter() {
$this->Auth->allow('home');
}
function isAuthorized() {
if (!empty($this->params['prefix']) && $this->params['prefix'] == 'admin') {
if ($this->Auth->user('role') != 'admin') {
return false;
}
}
return true;
}
?>
users_controller.php
<?php
class UsersController extends AppController {
var $name = 'Users';
function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow('register');
}
?>
Я перенес все настройки Auth в объявление в переменной $ components, потому что оно кажется более чистым и имеет больше смысла объявлять значения по умолчанию там. Но это скорее вопрос личных предпочтений, и он не должен оказывать реального влияния на функционирование кода.
Также обратите внимание, что если вы установите для autoRedirect
значение false, вам придется перенаправлять зарегистрированных пользователей вручную в действии Users :: login (), получая значение loginRedirect
с помощью $this->Auth->redirect()
.
Я не вижу никакой причины, по которой вас следует отправлять в / когда вы не вошли в систему и пытаетесь получить доступ к заблокированному действию, но, возможно, вам будет легче выяснить это после исправления вышеуказанного. **