box.session.on_auth()
Определение триггера, выполняемого во время аутентификации.
Функция-триггер on_auth вызывается в следующих случаях:
(1) Функция console.connect включает проверку
аутентификации для всех пользователей, кроме 'guest'. В этом случае
функция-триггер on_auth вызывается после функции-триггера
on_connect, если и только если подключение к этому моменту прошло
успешно.
(2) В бинарном протоколе предусмотрен отдельный
пакет аутентификации. В этом случае
подключение и аутентификация считаются отдельными шагами.
В отличие от других типов триггеров, функции-триггеры on_auth
вызываются до события. Поэтому триггерная функция вида
function auth_function () v = box.session.user(); end установит v в
"guest" — имя пользователя до аутентификации. Чтобы получить имя
пользователя после аутентификации, используйте специальный синтаксис:
function auth_function (user_name) v = user_name; end
Если триггер завершается ошибкой, ошибка отправляется клиенту, а подключение закрывается.
Параметры:
trigger-function(function) — функция, которая станет триггерной функциейold-trigger-function(function) — существующая триггерная функция, которая будет заменена на trigger-function
Возвращает
nil или указатель на функцию
Если параметры — (nil, old-trigger-function), то старый триггер удаляется.
Если оба параметра опущены, то в ответе возвращается список существующих триггерных функций.
Подробнее о характеристиках триггеров см. в разделе триггеры.
Пример 1
tarantool> function f ()> x = x + 1> endtarantool> box.session.on_auth(f)
Пример 2
Это более сложный пример с двумя экземплярами сервера.
Первый экземпляр сервера прослушивает порт 3301; имя его пользователя по
умолчанию — 'admin'. Есть три триггера on_auth:
- Первый триггер использует функцию без аргументов, она может только
проверять
box.session.user(). - Второй триггер использует функцию с аргументом
user_name, она может проверять какbox.session.user(), так иuser_name. - Третий триггер использует функцию с аргументами
user_nameиstatus, она может проверять все три значения:box.session.user(),user_nameиstatus.
Второй экземпляр сервера подключится с помощью console.connect, после чего отобразятся переменные, установленные функциями-триггерами.
-- На первом экземпляре сервера, прослушивание на котором настроено на порт 3301box.cfg{listen=3301}function function1()print('function 1, box.session.user()='..box.session.user())endfunction function2(user_name)print('function 2, box.session.user()='..box.session.user())print('function 2, user_name='..user_name)endfunction function3(user_name, status)print('function 3, box.session.user()='..box.session.user())print('function 3, user_name='..user_name)if status == true thenprint('function 3, status = true, authorization succeeded')endendbox.session.on_auth(function1)box.session.on_auth(function2)box.session.on_auth(function3)box.schema.user.passwd('admin')
-- На втором экземпляре сервера, который подключается по порту 3301console = require('console')console.connect('admin:admin@localhost:3301')
Результат выглядит так:
function 3, box.session.user()=guestfunction 3, user_name=adminfunction 3, status = true, authorization succeededfunction 2, box.session.user()=guestfunction 2, user_name=adminfunction 1, box.session.user()=guest