Как заставить работать проект на CakePHP с авторизацией в домене

Что имеем:

  1. Приложение на CakePHP с организацией контроля доступа с помощью плагина Authake (CakePHP 2.8 Authake Authake plugin version 2.2.3) + Windows 2008 R2 + IIS сервер
  2. Настраиваем IIS: включаем в настройке сайта в иконке проверка подлинности опцию обычная проверка подлинности вместо анонимная проверка подлинности
  3. Изменяем контроллер UserController.php плагина Authake метод login ( ):
    Что было
	
	/** ******************************************************************
	* Login functionality
	*******************************************************************/
	function login($Authake = null){

		if(!isset($this->Authake))
		{
			$this->Authake = $Authake;
			if ($this->Authake->isLogged())
			{
				if(!isset($this->request->data['requester']))
				{

				$this->Session->setFlash(__('You are already logged in!'), 'info', array('plugin' => 'Authake'));
				$this->redirect(Configure::read('Authake.loggedAction'));
				}
				else
				{
					return __('You are already logged in!');
				}
			}
		}

		// для доменной авторизации без !
		if (empty($this->request->data) ) 

		// для обычной авторизации	
		//if (!empty($this->request->data) )		
		{
			//$login = $this->request->data['User']['login'];
			$login = iconv('Windows-1251', 'UTF-8',  $_SERVER["AUTH_USER"]);
			//$password = $this->request->data['User']['password'];
			$password = iconv('Windows-1251', 'UTF-8',  $_SERVER["AUTH_PASSWORD"]);
			if (Configure::read('Authake.useEmailAsUsername') == false)
			{
				$user = $this->User->findByLogin($login);
			}
			else
			{
				$user = $this->User->findByEmail($login);
			}

			if (empty($user))
			{
				if(!isset($this->request->data['requester']))
				{
				$this->Session->setFlash(__('Invalid login or password!'), 'error', array('plugin' => 'Authake'));
				return;
				}
				else
				{
					return __('Invalid login or password!');
				}
			}

			// check for locked account

			if ($user['User']['id'] != 1 and $user['User']['disable'])
			{
				if(!isset($this->request->data['requester']))
				{
					$this->Session->setFlash(__('Your account is disabled!'), 'error', array('plugin' => 'Authake'));
					$this->redirect('/');
				}
				else
				{
					return __('Your account is disabled!');
				}
			}

			// check for expired account
			$exp = $user['User']['expire_account'];

			if ($user['User']['id'] != 1 and $exp != '0000-00-00' and $exp != null and strtotime($exp) < time()) 			{ 				if(!isset($this->request->data['requester']))
				{
					$this->Session->setFlash(__('Your account has expired!'), 'error', array('plugin' => 'Authake'));
					$this->redirect('/');
				}
				else
				{
					return __('Your account has expired!');
				}
			}

			// check for not confirmed email

			if ($user['User']['emailcheckcode'] != '')
			{
				if(!isset($this->request->data['requester']))
				{
					$this->Session->setFlash(__('You registration has not been confirmed!'), 'warning', array('plugin' => 'Authake'));
					$this->redirect(array('action'=>'verify'));
				}
				else
				{
					return __('You registration has not been confirmed!');
				}
			}

			$userdata = $this->User->getLoginData($login, $password);

			if (empty($userdata))
			{
				if(!isset($this->request->data['requester']))
				{
				$this->Session->setFlash(__('Invalid login or password!'), 'error', array('plugin' => 'Authake'));
				return;
				}
				else
				{
					return __('Invalid login or password!');
				}
			}
			else
			{
				if ($user['User']['passwordchangecode'] != '')
				{//clear password change code (if there is any)
					$this->User->unbindModel(array('hasAndBelongsToMany'=>array('Group')), false);
					$user['User']['passwordchangecode'] = '';
					$this->User->save($user);
				}

				$this->Authake->login($userdata['User']);

/* 				debug($userdata);
				die(); */

				// для доменной авторизации не работает проверить почему
				//if(isset($this->request->data['requester']))

				// для обычной авторизации
				if(!isset($this->request->data['requester']))
				{
					/** *************************************************************************
					 *  обрабатываем авторизацию для создания переменной сессии для ведения логов
					 ** ************************************************************************/

					$this->Session->setFlash(__('You are logged in as ').$userdata['User']['login'], 'success' , array('plugin'=>'authake'));

					// ищем логин пользователя в базе так как в данной редакции authake логин передается зашифрованным
					$username = $this->User->find('first', array('conditions' => array('User.id' => $userdata['User']['id'])));
					$userlogin = $username['User']['login'];

					// читаем к каким группам относится пользователь
					$groups = $userdata['User']['group_names'];
					$session_groups = '';
					foreach ($groups as $group):
					$session_groups .= $group.' ';
					endforeach;

					// создаем новую переменную сессии для ведения Userlog

					$newUserlogsSettings = $userlogin.'|'.$session_groups;
					$this->Session->write('UserlogsSettings', $newUserlogsSettings);

					if (($next = $this->Authake->getPreviousUrl()) !== null)
					{
						$this->redirect($next);
					}
					else
					{
						$this->redirect(Configure::read('Authake.loggedAction'));
					}
				}
				else
				{
					return true;
				}
			}
		}
	}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.