Содержание
Как написать свой модуль аутентификации?
DokuWiki обладает модульной системой аутентификации, и может использовать для аутентификации все, что доступно в PHP.
Если ни один из предложенных модулей аутентификации не подходит вам, вы можете легко создать свой собственный. Модули хранятся в каталоге inc/auth/
и должны называться <backend>.class.php
, где <backend> - имя вашего модуля авторизации. В этом файлы вы должны описать класс под именем auth_<backend>
. Ваш класс должен наследовать или один из уже существующих классов в модулях, или класс auth_basic
, описанный в inc/auth/basic.class.php
.
В вашем классе должны быть перегружены несколько методов и определены некоторые публичные поля из базового класса. Реализуя ваш класс, вы должны обращать внимание на комментарии в базовом классе!
Если вы написали новый модуль, поделитесь им с другими!
Установка членов класса
$success
Эта переменная типа bool должна быть установлена в true в вашем конструкторе, если модуль авторизации был корректно инициализирован. Используйте эту переменную для уведомления системы об ошибке в модуле авторизации путем установления ее значения в false.
$cando
$cando представляет собой ассоциативный массив значений типа bool. Вы должны установить значения массива в true для всех функций, которые реализует ваш модуль. Список ключей массива и их смысл:
addUser | можно создавать пользователей |
delUser | можно удалять пользователей |
modLogin | можно менять имена пользователей |
modPass | можно менять пароли |
modName | можно менять имена |
modMail | можно менять e-mail |
modGroups | можно менять группу |
getUsers | можно получить (отфильтрованный)список пользователей |
getUserCount | можно узнать количество пользователей |
getGroups | можно получить список доступных групп |
external | модуль сам осуществляет проверку аутентификации через внешнюю функцию |
logoff | модуль имеет свою реализацию логаута |
Требуемые методы
Для работы требуется реализовать всего 2 функции. Причем реализовав другие функции, можно расширить возможности модуля.
Конструктор
В вашем классе непременно должен быть конструктор, в котором устанавливаются нужные значения пременных.
checkPass()
Эта функция должна проверять, являются ли правильными данные имя пользователя и plaintext пароль.
getUserData()
Возвращает пользовательскую информацию, такую как email или имя.
Optional Methods
Перечисленные ниже методы являются опциональными и вызываются только если установлены соответствующие поля массива cando.
trustExternal()
Если значение $cando['external'] равно true, то эта функция используется для аутентификации пользователя – все остальные внутренние функции DokuWiki не будут использоваться для аутентификации.
Эта функция может использоваться для аутентификации с помощью сторонних cookies или механизмов Apache. Она заменяет функцию auth_login()
из файла inc/auth.php
.
Для примера использования этой функции смотрите механизм аутентификации punbb.
Если эта функция реализована, вы можете убрать все остальные функции из вашего модуля, даже если они указаны в требованиях выше. ( за исключением конструктора).
В соответствии с примером punbb функция trustExternal() устанавливает следующие глобальные переменные:
$USERINFO['name']
$USERINFO['mail']
$USERINFO['grps']
$_SERVER['REMOTE_USER']
$_SESSION[DOKU_COOKIE]['auth']['user']
$_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
для описания переменных $USERINFO смотрите документацию для функции GetUserData.
Не забудьте добавить строку 'global $USERINFO' в начало тела этой функции, чтобы сделать переменную доступной.
logOff()
Если $cando['logoff'] установлено в true, эта функция будет вызвана при наступлении события разлогинивания (logoff). Используйте эту функцию для очистки cookies или аналогичных целей. Фактически эта функция полезна только при использовании trustExternal
createUser()
Создает нового пользователя с заданными данными.
modifyUser()
Редактирует данные пользователя.
deleteUser()
Удаляет 1 или более пользователей.
getUserCount()
Возвращает число пользователей, удовлетворяющих заданным критериям фильтрации.
retrieveUsers()
Извлекает данные аккаунта для пользователей, соответствущих критериям фильтрации.
addGroup()
Создает новую группу.
retrieveGroups()
Возвращает список всех доступных групп.