Запутанный вопрос, но я постараюсь подвести итог.
У меня есть настройка входа в систему с использованием компонента аутентификации Cakephp, который в зависимости от роли пользователя перенаправляет пользователя на соответствующую страницу. Кажется, он отлично работает в Chrome/FF/IE 10 в моей локальной настройке WAMP. Но, похоже, это не работает с IE после того, как я загрузил сайт на Bluehost.com.
Проблема заключается в том, что при входе на мой веб-сайт на bluehost через IE10 я продолжаю перенаправляться обратно на страницу входа после входа. Перенаправление работает в любом другом браузере. Как ни странно, это работает в IE10 в локальной среде разработки.
ИСПОЛЬЗОВАНИЕ CAKEPHP 2.4.5
Локальный разработчик: (перенаправление после входа в систему работает нормально во всех браузерах)
Wamp 2.4 Apache 2.4.4 PHP 5.4.12 MYSQL 5.6.12
Bluehost: (перенаправление после входа не работает в IE10, перенаправляет обратно на страницу входа!)
PHP 5.4 Апач???
Вот урезанная версия моего AppController, показывающая объявления Auth.
class AppController extends Controller {
public $components = array(
'DebugKit.Toolbar',
'Session',
'Auth'=>array(
'loginAction'=>array('controller'=>'users', 'action'=>'login'),
'logoutRedirect'=>array('controller'=>'users', 'action'=>'loggedout'),
'authError'=>'You cannot access that page', //Error message whenever someone access a page without auth
'authorize'=>array('Controller') //Where in our application that authorization will occur
)
);
////Determines what logged in users have access to
public function isAuthorized($user) {
if($user['role'] == 'admin') {
switch ($this->name) {
case 'Home':
return true;
break;
case 'BillingCenters':
return true;
break;
case 'Merchants':
return true;
break;
}
}
if($user['role'] == 'merchant') {
switch ($this->name) {
case 'MCP':
return true;
break;
case 'Users':
switch ($this->action){
case 'logout':
return true;
}
return false;
}
}
die('isAuthorized in AppController denies access to this controller called: ' . $this->name);
}
//Determines what non logged in users have access to
public function beforeFilter() {
//Logic placed here will run before the action is run
parent::beforeFilter();
$this->Auth->allow('loggedout', 'login');
}
}
Вот код в моем UsersController, который относится к логину. Я удалил фрагмент кода поиска базы данных SQL, который заполняет роль пользователя в переменной сеанса, чтобы сделать его более читаемым. Важен конечный бит, который перенаправляет пользователя в зависимости от его роли.
public function login() {
$this->layout = 'loginlogout';
if ($this->request->is('post')) {
if ($this->Auth->login()) {
/* ---- removed chunk of code that determines Auth.User.role value for Session... for readability, -- */
if ($this->Session->read('Auth.User.role') == 'admin') {
$this->redirect(array('controller' => 'home', 'action' => 'index'));
}
if ($this->Session->read('Auth.User.role') == 'merchant') {
$this->redirect(array('controller' => 'MCP', 'action' => 'snapshot'));
}
die('Unable to determine user role for redirection');
} else {
$this->Session->setFlash('Your username/password combination was incorrect');
}
}
}
И ниже я прикрепил скриншоты различных сетевых трассировок браузера после нажатия на кнопку входа. После входа в систему я ожидаю, что меня перенаправят на «MCP/Snapshot». Все скриншоты сделаны при входе на мой сайт на действующем сервере (Bluehost).
CHROME (работает перенаправление при входе и после входа!)
Firefox (работает перенаправление при входе и после входа!)
IE10 INTERNET EXPLORER 10 – ПОСЛЕ ВХОДА В ИНТЕРНЕТ НЕ РАБОТАЕТ ЗАГРУЗИТЬ СТРАНИЦУ/ДЕЙСТВИЕ SNAPSHOT MCP и снова возвращает пользователя на страницу входа!!
Кажется, это работает при входе в мою локальную среду разработки (скриншоты не предоставлены). Дайте мне понять, почему это не работает для IE10 на Bluehost? Я тоже не уверен, что понимаю коды возврата HTTP 302!