Аутентификация
Elgg предоставляет всё необходимое для аутентификации пользователей через имя пользователя/email и пароль из коробки, включая:
куки «запомнить меня» для постоянного входа
логика сброса пароля
безопасное хранение паролей
выход
интерфейсы для выполнения всего вышеперечисленного
Всё, что остаётся вам как разработчику, — это использовать встроенные функции аутентификации для защиты ваших страниц и действий.
Работа с авторизованным пользователем
Проверьте, авторизован ли текущий пользователь, с помощью elgg_is_logged_in():
if (elgg_is_logged_in()) {
// do something just for logged-in users
}
Проверьте, является ли текущий пользователь администратором, с помощью elgg_is_admin_logged_in():
if (elgg_is_admin_logged_in()) {
// do something just for admins
}
Получите текущего авторизованного пользователя с помощью elgg_get_logged_in_user_entity():
$user = elgg_get_logged_in_user_entity();
Возвращаемый объект — это ElggUser, поэтому вы можете использовать все методы и свойства этого класса для получения информации о пользователе. Если пользователь не авторизован, это вернёт null, поэтому обязательно проверьте это сначала.
Привратники
Функции привратника позволяют вам управлять выполнением кода, применяя правила контроля доступа.
Перенаправьте пользователя на главную страницу, если он не авторизован, с помощью elgg_gatekeeper():
elgg_gatekeeper();
echo "Information for logged-in users only";
Перенаправьте пользователя на главную страницу, если он не администратор, с помощью elgg_admin_gatekeeper():
elgg_admin_gatekeeper();
echo "Information for admins only";
Подключаемые модули аутентификации
Elgg поддерживает подключаемые модули аутентификации (PAM), что позволяет вам писать собственные обработчики аутентификации. Всякий раз, когда запрос нуждается в аутентификации, система вызовет elgg_pam_authenticate(), который опрашивает зарегистрированные обработчики PAM, пока один не вернёт успех.
Предпочтительный подход — создать отдельный плагин Elgg, который будет иметь одну простую задачу: обработать запрос аутентификации. Это включает в себя настройку обработчика аутентификации в классе Bootstrap плагина и регистрацию его в модуле PAM, чтобы он обрабатывался всякий раз, когда системе нужно аутентифицировать запрос.
Обработчик аутентификации — это функция, принимающая один параметр. Регистрация обработчика выполняется с помощью elgg_register_pam_handler(), который принимает имя обработчика аутентификации, важность и политику в качестве параметров. Рекомендуется регистрировать обработчик в функции init плагина, например:
// classes/Your/Plugin/Bootstrap.php
function init() {
// Register the authentication handler
elgg_register_pam_handler('your_plugin_auth_handler');
}
// your_plugin/lib/functions.php
function your_plugin_auth_handler($credentials) {
// do things ...
}
Важность
По умолчанию модуль аутентификации регистрируется с важностью sufficient.
В списке модулей аутентификации; если любой, помеченный как sufficient, возвращает true, elgg_pam_authenticate() также вернёт true. Исключением из этого является случай, когда модуль аутентификации зарегистрирован с важностью required. Все требуемые модули должны вернуть true, чтобы elgg_pam_authenticate() вернул true, независимо от того, вернули ли все достаточные модули true.
Переданные учётные данные
Формат учётных данных, переданных обработчику, может варьироваться в зависимости от исходного запроса. Например, обычный вход через форму входа создаст именованный массив с ключами username и password. Если запрос был сделан, например, через XML-RPC, то учётные данные будут установлены в заголовке HTTP, поэтому в этом случае ничего не будет передано обработчику аутентификации, и обработчику нужно будет выполнить шаги самостоятельно для аутентификации запроса.
Возвращаемое значение
Обработчик аутентификации должен возвращать boolean, указывающий, можно ли аутентифицировать запрос или нет. Одно предостережение заключается в том, что в случае обычного входа пользователя, когда учётные данные доступны как имя пользователя и пароль, пользователь будет авторизован. В случае примера с XML-RPC обработчик аутентификации должен будет выполнить этот шаг самостоятельно, поскольку остальная часть системы не будет иметь никакого представления ни о возможных форматах переданных учётных данных, ни об их содержимом. Вход пользователя довольно прост и выполняется с помощью elgg_login(), который ожидает объект ElggUser.