Вход в CakePHP имеет цикл перенаправления с правильными учетными данными - PullRequest
2 голосов
/ 30 августа 2011

Я посмотрел другие вопросы, относящиеся к этой теме, но ни один из них не был полезен.

Ожидаемый результат

На главной странице со ссылками на различные веб-приложения пользователь нажимает, чтобы получить доступ к веб-приложению. Пользователь перенаправлен на страницу входа. Я попытался переопределить функцию входа в систему для автоматического входа пользователей сети на основе поиска их IP-адреса. Имя их компьютера хранится как имя пользователя в базе данных, и все пароли одинаковы. Это подтверждается, и пользователь автоматически входит в систему и перенаправляется на домашнюю страницу веб-приложений без необходимости видеть форму входа.

Примечание: этот автоматический вход работает при непосредственном доступе к веб-адресу, но эта проблема началась, когда я добавил в «панель инструментов» веб-приложений. Однако это необходимо, чтобы на рабочем столе пользователя был только один ярлык.

rout.php Код

Router::connect('/', array('controller' => 'cns', 'action' => 'view'));

app_controller.php Код

function beforeFilter() {

 $this->Auth->allow('display');

 # Users need authorised before viewing these pages
 $this->Auth->deny('index','view', 'add','edit','delete'); 

 $this->Auth->loginRedirect = array( 'controller'=>'cns', 'action'=>'view');
 $this->Auth->logoutRedirect = array( 'controller'=>'pages', 'action'=>'logged_out');

}       

users_controller.php Код

function beforeFilter() {
 $this->Auth->autoRedirect = false;
}

function login () {

 # Automatic login based on computer name
 $this->data['User']['password'] = $this->Auth->password('qwerty');

 # Result: x-xxxxxx.domain.local (function declared below)
 $full_host = gethostbyaddr($this->get_user_IP_address());

 # Result: x-xxxxxx[.domain.local]
 $position_of_split = strrpos($full_host, ".gmi.local");

 # Result: x-xxxxxx
 $computer_name = substr($full_host,0,$position_of_split);

 # If username is not been provided, use the computer name discovered by auto-login
 (!isset($this->data['User']['username']) ? $this->data['User']['username'] = $computer_name : null);

 # If login is successful, redirect to view. Otherwise, echo error message.
 if($this->Auth->login($this->data)){
  $this->redirect(array('controller' => 'cns', 'action' => 'view'));
 } else {
  echo "Unable to log you in. Please advise IT."; die;
 }
}

function get_user_IP_address() {
 if (isset($_SERVER)) {
  if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
   return $_SERVER["HTTP_X_FORWARDED_FOR"];         
   if (isset($_SERVER["HTTP_CLIENT_IP"]))
    return $_SERVER["HTTP_CLIENT_IP"];
   return $_SERVER["REMOTE_ADDR"];
 }

 if (getenv('HTTP_X_FORWARDED_FOR'))
  return getenv('HTTP_X_FORWARDED_FOR');

 if (getenv('HTTP_CLIENT_IP'))
  return getenv('HTTP_CLIENT_IP');

 return getenv('REMOTE_ADDR');
}

Если вам нужен дополнительный код или объяснение, просто спросите в комментариях.

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

1 Ответ

1 голос
/ 21 ноября 2011

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

Перенаправление входа в бесконечный цикл

...