Plug Minetest's auth mechanism into a MySQL database.
First, if mod security is enabled (secure.enable_security = true
), this mod must be added as
a trusted mod (in the secure.trusted_mods
config entry). There is no other solution to
make it work under mod security.
By default, mysql_auth
doesn't run in singleplayer. This can be overriden by setting
mysql_auth.enable_singleplayer
to true
.
Configuration may be done as regular Minetest settings entries, or using a config file, allowing
for more configuration options; to do so specify the path as mysql_auth.cfgfile
. This config
must contain a Lua table that can be read by minetest.deserialize
, i.e. a regular table
definition follwing a return
statement (see the example below).
When using flat Minetest configuation entries, all the following option names must be prefixed
with mysql_auth.
. When using a config file, entries are to be hierarchised as per the dot
separator.
Values written next to option names are default values.
db.host = 'localhost'
db.user = nil -- MySQL connector defaults to current username
db.pass = nil -- Using password: NO
db.port = nil -- MySQL connector defaults to either 3306, or no port if using localhost/unix socket
db.db = nil -- <== Setting this is required
Connection options are passed as a table through the db.connopts
entry.
Its format must be the same as LuaPower's MySQL module mysql.connect(options_t)
function,
that is (all members are optional);
connopts = {
host = ...,
user = ...,
pass = ...,
db = ...,
port = ...,
unix_socket = ...,
flags = { ... },
options = { ... },
attrs = { ... },
-- Also key, cert, ca, cpath, cipher
}
db.tables.auths.name = 'auths'
db.tables.auths.schema.userid = 'userid'
db.tables.auths.schema.userid_type = 'INT'
db.tables.auths.schema.username = 'username'
db.tables.auths.schema.username_type = 'VARCHAR(32)'
db.tables.auths.schema.password = 'password'
db.tables.auths.schema.password_type = 'VARCHAR(512)'
db.tables.auths.schema.privs = 'privs'
db.tables.auths.schema.privs_type = 'VARCHAR(512)'
db.tables.auths.schema.lastlogin = 'lastlogin'
db.tables.auths.schema.lastlogin_type = 'BIGINT'
The _type
config entries are only used when creating an auth table, i.e. when
db.tables.auths.name
doesn't exist.
minetest.conf
:
mysql_auth.cfgfile = /srv/minetest/skyblock/mysql_auth_config
/srv/minetest/skyblock/mysql_auth_config
:
return {
db = {
connopts = {
user = 'minetest',
pass = 'BQy77wK$Um6es3Bi($iZ*w3N',
db = 'minetest'
},
tables = {
auths = {
name = 'skyblock_auths'
}
}
}
}
minetest.conf
:
mysql_auth.db.user = minetest
mysql_auth.db.pass = BQy77wK$Um6es3Bi($iZ*w3N
mysql_auth.db.db = minetest
mysql_auth.db.tables.auth.name = skyblock_auths
mysql_auth
is licensed under GNU LGPLv3.
Using the Public Domain-licensed LuaPower mysql
module.