Пользователь
Модуль "Пользователь" предоставляет функцию получения информации и Token
о текущем вошедшем в систему игроке. Если в игре можно использовать все функции без входа в систему, то этот модуль не требуется. В противном случае необходимо вызывать соответствующие интерфейсы этого модуля для реализации нужных функций.
После прочтения части, относящейся к вашему игровому движку, на странице Общее представление о JOGOS_SDK
, вы можете использовать связанные функции следующим образом:
window.JOGOS_SDK.user;
Получение информации о текущем пользователе
Для получения информации о текущем игроке можно использовать следующий метод:
try {
const user = await window.JOGOS_SDK.user.getUser();
console.log("Get user result", user);
} catch (err) {
// Обработка исключения
console.error(err);
}
Если текущий игрок не зарегистрирован или не вошел в систему, система автоматически откроет диалоговое окно входа в систему/регистрации, требуя от пользователя зарегистрироваться или войти в систему, чтобы продолжить игру. В противном случае будет возвращено исключение 401 Не авторизован, пожалуйста, войдите в систему снова
.
Если аккаунт текущего игрока был заблокирован или удален, также будет возвращена соответствующая информация об исключении.
Структура объекта игрока, возвращаемого при успехе, выглядит следующим образом:
// Информация о пользователе
export interface UserInfo {
// Идентификатор пользователя
userId: string;
// Имя пользователя
username: string;
// URL аватара
profilePictureUrl: string;
// Идентификатор игры
gameId: number;
}
Имя пользователя в JOGOS_SDK
состоит из 6-20 символов и может содержать буквы, цифры, точки и подчеркивания.
UserId в JOGOS_SDK соответствует аккаунту игрока в отношении один к одному. Если в вашей игре можно создавать несколько игровых персонажей или переключаться между персонажами на разных серверах, ваш сервер должен обрабатывать эту логику, чтобы избежать потери или невозможности переключения нескольких персонажей игрока.
Получение токена пользователя (требуется интеграция с вашим игровым сервером)
Токен пользователя содержит информацию о текущем вошедшем в систему игроке. Вы должны отправлять его на ваш сервер при необходимости, а на сервере проверять/декодировать его для извлечения связанной информации, что очень полезно для связывания пользовательских аккаунтов.
Для получения токена пользователя можно использовать следующий метод:
try {
const token = await window.JOGOS_SDK.user.getUserToken();
console.log("Get token result", token);
} catch (err) {
// Обработка исключения
console.error(err);
}
Срок жизни токена составляет 1 час. Мы рекомендуем не хранить Token, а вызывать этот метод каждый раз, когда он нужен.
Если текущий игрок не зарегистрирован или не вошел в систему, система автоматически откроет диалоговое окно входа в систему/регистрации, требуя от пользователя зарегистрироваться или войти в систему, чтобы продолжить игру. В противном случае будет возвращено исключение 401 Не авторизован, пожалуйста, войдите в систему снова
.
Если аккаунт текущего игрока был заблокирован или удален, также будет возвращена соответствующая информация об исключении.
Возвращаемый токен можно декодировать и протестировать на jwt.io.
Информация в успешно возвращенном токене содержит следующие данные:
{
"jti": "1899405772252258304",
"sub": "{\"profilePictureUrl\":\"a33bf366e34d48e984a094fc923d7b06.png\",\"gameId\":\"1\",\"profileDefaultAvatar\":\"default-avatar.png\",\"userId\":\"88E1B72FED537C6943C85C28F639BE0B\",\"username\":\"55895999999999999999\"}",
"iss": "com:jogos:sdk",
"iat": 1741688600,
"exp": 1745288600
}
Когда вам нужно использовать сервер для аутентификации запросов, вы должны отправить токен на ваш сервер, затем декодировать и проверить токен. Для проверки токена можно использовать открытый ключ, размещенный на этом ресурсе Открытый ключ токена пользователя
. Мы рекомендуем получать ключ каждый раз при проверке токена, так как он может изменяться.
Вот пример декодирования и проверки токена с использованием TypeScript
и открытого ключа:
import * as jwt from "jsonwebtoken";
export interface CrazyTokenPayload {
userId: string;
username: string;
gameId: string;
profilePictureUrl: string;
}
export const decodeUserToken = async (
token: string
): Promise<CrazyTokenPayload> => {
const publickKey = `...`; // Получено из https://www.jogos.com/sdk/public-key.txt
const payload = jwt.verify(token, key, { algorithms: ["RS256"] });
return payload as CrazyTokenPayload;
};
Локальное тестирование
При локальном тестировании связанные интерфейсы модуля пользователя возвращают только тестовые данные.