box.session.on_auth()
box.session.on_auth([trigger-function [, old-trigger-function]])
Define a trigger for execution during authentication.
The on_auth trigger function is invoked in these circumstances:
(1) The console.connect function includes an
authentication check for all users except 'guest'. For this case,
the on_auth trigger function is invoked after the on_connect
trigger function, if and only if the connection has succeeded so
far.
(2) The binary protocol has a separate
authentication packet. For this case,
connection and authentication are considered to be separate steps.
Unlike other trigger types, on_auth trigger functions are invoked
before the event. Therefore a trigger function like
function auth_function () v = box.session.user(); end will set v to
"guest", the user name before the authentication is done. To get the
user name after the authentication is done, use the special syntax:
function auth_function (user_name) v = user_name; end
If the trigger fails by raising an error, the error is sent to the client and the connection is closed.
Parameters:
-
trigger-function(function) — function which will become the trigger function -
old-trigger-function(function) — existing trigger function which will be replaced by trigger-function
Returns
nil or function pointer
If the parameters are (nil, old-trigger-function), then the old trigger is deleted.
If both parameters are omitted, then the response is a list of existing trigger functions.
Details about trigger characteristics are in the triggers section.
Example 1
tarantool> function f ()> x = x + 1> endtarantool> box.session.on_auth(f)
Example 2
This is a more complex example, with two server instances.
The first server instance listens on port 3301; its default user name is
'admin'. There are three on_auth triggers:
- The first trigger has a function with no arguments, it can only look
at
box.session.user(). - The second trigger has a function with a
user_nameargument, it can look at both of:box.session.user()anduser_name. - The third trigger has a function with a
user_nameargument and astatusargument, it can look at all three of:box.session.user()anduser_nameandstatus.
The second server instance will connect with console.connect, and then will cause a display of the variables that were set by the trigger functions.
-- On the first server instance, which listens on port 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')
-- On the second server instance, that connects to port 3301console = require('console')console.connect('admin:admin@localhost:3301')
The result looks like this:
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