Что имеем:
- Приложение на CakePHP с организацией контроля доступа с помощью плагина Authake (CakePHP 2.8 Authake Authake plugin version 2.2.3) + Windows 2008 R2 + IIS сервер
- Настраиваем IIS: включаем в настройке сайта в иконке проверка подлинности опцию обычная проверка подлинности вместо анонимная проверка подлинности
- Изменяем контроллер 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; } } } }