Этот способ подходит, если:
У вас есть сайт или сервис с БД MySQL/MariaDB, через который пользователи могут зарегистрироваться
У лаунчсервера есть прямой доступ к БД
В БД пароли хранятся в одном столбце, в таблице пользователей
Этот обработчик хранит все данные об авторизациях в MySQL-базе данных и использует готовые UUID . Этот обработчик рекомендуется использовать всем проектам по мере возможности. Пример конфигурации(не полной(пример полной выше)):
"auth": {
"std": {
"core": {
"type": "mysql",
"mySQLHolder": {
"address": "localhost",
"port": 3306,
"username": "launchserver",
"password": "password",
"database": "db?serverTimezone=UTC",
"timezone": "UTC",
"useHikari": true
},
},
"isDefault": true,
"displayName": "Default"
}
},
Далее вам нужно настроить подключение к вашей бд. Нужно заменить адресlocalhost
, где расположена бд(если у вас бд стоит на том же сервере где и лаунчер то оставляйте localhost
), имя пользователяlaunchserver
, парольpassword
и название базы данныхdb
.
Далее мы настраиваем PasswordVerifier(см. в теме ниже "Конфигурация PasswordVerifier").
После настройки PasswordVerifier нужно выполнить такой sql запрос в вашей таблице:
-- Добавляет недостающие поля в таблицу
ALTER TABLE users
ADD COLUMN uuid CHAR(36) UNIQUE DEFAULT NULL,
ADD COLUMN accessToken CHAR(32) DEFAULT NULL,
ADD COLUMN serverID VARCHAR(41) DEFAULT NULL,
ADD COLUMN hwidId BIGINT DEFAULT NULL,
ADD COLUMN permission tinyint NOT NULL DEFAULT '0';
-- Создаёт триггер на генерацию UUID для новых пользователей
DELIMITER //
CREATE TRIGGER setUUID BEFORE INSERT ON users
FOR EACH ROW BEGIN
IF NEW.uuid IS NULL THEN
SET NEW.uuid = UUID();
END IF;
END; //
DELIMITER ;
-- Генерирует UUID для уже существующих пользователей
UPDATE users SET uuid=(SELECT UUID()) WHERE uuid IS NULL;
CREATE TABLE `hwids` (
`id` bigint(20) NOT NULL,
`publickey` blob,
`hwDiskId` varchar(255) DEFAULT NULL,
`baseboardSerialNumber` varchar(255) DEFAULT NULL,
`graphicCard` varchar(255) DEFAULT NULL,
`displayId` blob,
`bitness` int(11) DEFAULT NULL,
`totalMemory` bigint(20) DEFAULT NULL,
`logicalProcessors` int(11) DEFAULT NULL,
`physicalProcessors` int(11) DEFAULT NULL,
`processorMaxFreq` bigint(11) DEFAULT NULL,
`battery` tinyint(1) NOT NULL DEFAULT "0",
`banned` tinyint(1) NOT NULL DEFAULT "0"
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `hwids`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `publickey` (`publickey`(255));
ALTER TABLE `hwids`
MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT;
ALTER TABLE `users`
ADD CONSTRAINT `users_hwidfk` FOREIGN KEY (`hwidId`) REFERENCES `hwids` (`id`);
где вам нужно везде заменить users
на название таблицы с пользователями вашей cms. А также названия остальных столбиков на ваши.
Потом добавляем строчки с настройкой таблиц и настраиваем их(описание какая за что отвечает сверху):
"table": "users",
"tableHwid": "hwids",
"uuidColumn": "uuid",
"usernameColumn": "username",
"passwordColumn": "password",
"accessTokenColumn": "accessToken",
"hardwareIdColumn": "hwidId",
"serverIDColumn": "serverID"
по итогу у нас настройка конфига будет похожа на пример в начале.
Для работы HWID требуется - Настройка ProtectHandler
Важно
Начиная с 5.2.9 метод MySQL генерирует access и refresh токены. Refresh токен генерируется на основе имени пользователя, хеша пароля и секретной соли(legacySalt). После смены пароля access токен продолжит действовать в течении определенного в конфигурации времени и только после потребуется повторный вход. Если вы потеряете файлы в папке .keys
лаунчсервера игроки будут вынуждены перелогинится.