Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

box.session.on_auth()

box.session.on_auth([trigger-function [, old-trigger-function]])

Определение триггера, выполняемого во время аутентификации.

Функция-триггер 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 then    print('function 3, status = true, authorization succeeded')    end  endbox.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