box.session.on_auth()
-
box.session.
on_auth
([trigger-function[, old-trigger-function]])¶ Определение триггера, используемого во время аутентификации.
Вызов функции
on_auth
с триггером происходит в следующих обстоятельствах:- Функция console.connect включает в себя проверку аутентификации всех пользователей, кроме „guest“. Вызов функции
on_auth
с триггером происходит после триггераon_connect
только в том случае, если подключение было успешным. - В бинарном протоколе есть отдельный пакет для аутентификации. В этом случае подключение и аутентификация считаются отдельными действиям.
В отличие от других типов триггеров, вызов функций с триггером
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
) – существующая функция с триггером, которую заменит новая
возвращает: nil или указатель функции
Если указаны параметры (nil, old-trigger-function), старый триггер будет удален.
Если не указан ни один параметр, ответом будет список существующих функций с триггером.
Подробная информация о характеристиках триггера находится в разделе Триггеры.
Пример 1
tarantool> function f () > x = x + 1 > end tarantool> 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, а затем отобразит переменные, определенные функциями с триггером.
-- На первом экземпляре сервера, прослушивание на котором настроено на порт 3301 box.cfg{listen=3301} function function1() print('function 1, box.session.user()='..box.session.user()) end function function2(user_name) print('function 2, box.session.user()='..box.session.user()) print('function 2, user_name='..user_name) end function function3(user_name, status) print('function 3, box.session.user()='..box.session.user()) print('function 3, user_name='..user_name) if status == true then print('function 3, status = true, authorization succeeded') end end box.session.on_auth(function1) box.session.on_auth(function2) box.session.on_auth(function3) box.schema.user.passwd('admin')
-- На втором экземпляре сервера, который подключается по порту 3301 console = require('console') console.connect('admin:admin@localhost:3301')
Теперь результат выглядит следующим образом:
function 3, box.session.user()=guest function 3, user_name=admin function 3, status = true, authorization succeeded function 2, box.session.user()=guest function 2, user_name=admin function 1, box.session.user()=guest
- Функция console.connect включает в себя проверку аутентификации всех пользователей, кроме „guest“. Вызов функции