Я посмотрел другие вопросы, относящиеся к этой теме, но ни один из них не был полезен.
Ожидаемый результат
На главной странице со ссылками на различные веб-приложения пользователь нажимает, чтобы получить доступ к веб-приложению. Пользователь перенаправлен на страницу входа. Я попытался переопределить функцию входа в систему для автоматического входа пользователей сети на основе поиска их 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');
}
Если вам нужен дополнительный код или объяснение, просто спросите в комментариях.
Заранее спасибо. :)