Table of Contents

Как написать свой модуль аутентификации ?

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

All these methods are optional and will only be called if the appropriate cando fields are set

trustExternal()

If $cando['external'] is true, this function is used to authenticate a user – all other DokuWiki internals will not be used for authenticating.

The function can be used to authenticate against third party cookies or Apache auth mechanisms and replaces the auth_login() function from inc/auth.php.

Have a look at the punbb backend for an example usage of this function.

If this function is implemented you may omit all other functions from your module (even the required ones above - except for the constructor of course).

According to the punbb example the trustExternal() function has to set the following global variables:
$USERINFO['name']
$USERINFO['mail']
$USERINFO['grps']
$_SERVER['REMOTE_USER']
$_SESSION[DOKU_COOKIE]['auth']['user']
$_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
for a description of the $USERINFO variables see the documentation of the GetUserData function.
Do not forget to add 'global $USERINFO' to the start of this function, to make the variable accessable.

logOff()

If $cando['logoff'] is set to true this function will be called on a logoff event. Use it to clear cookies or similar actions. Probably only useful with trustExternal

createUser()

Creates a user with the provided data.

modifyUser()

Modifies a user's data.

deleteUser()

Deletes one or more users.

getUserCount()

Returns the number of users matching certain filter criteria.

retrieveUsers()

Fetches userdata for multiple users matching a certain filter criteria.

addGroup()

Creates a new Group

retrieveGroups()

List all available groups