====== Как написать свой модуль аутентификации ?====== [[wiki:DokuWiki]] обладает модульной системой аутентификации, и может использовать для аутентификации все, что доступно в PHP. Если ни один из предложенных модулей аутентификации не подходит вам, вы можете легко создать свой собственный. Модули хранятся в каталоге ''inc/auth/'' и должны называться ''.class.php'', где - имя вашего модуля авторизации. В этом файлы вы должны описать класс под именем ''auth_''. Ваш класс должен наследовать или один из уже существующих классов в модулях, или класс ''auth_basic'', описанный в ''inc/auth/basic.class.php''. В вашем классе должны быть перегружены несколько методов и определены некоторые публичные поля из [[http://dev.splitbrain.org/view/darcs/dokuwiki/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