Руководства
Проверьте на своём сервере
Копировать страницу
Знайте, какой игрок вызывает ваш сервер. Отправьте токен сессии с страницы, проверьте его с помощью Lia один раз, а затем сохраните свою собственную сессию.
Любой может отправить вашему серверу запрос, в котором говорится "I'игрок p_3f9c…". Таким образом, страница отправляет сессионный токен который Lia подписал, и ваш сервер спрашивает Lia, чьё это.
#В вашей странице
Отправьте токен с вашим первым запросом, или с чем-то, что имеет значение. Токены действуют 15 минут; Lia.session() всегда дает новую.
export async function api(path, body) {
const { session } = await Lia.session();
const res = await fetch(path, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ ...body, session }),
});
if (!res.ok) throw new Error((await res.json()).error);
return res.json();
}#На вашем сервере
const LIA = "https://api.lialabs.org/api/apps/v1";
async function playerFrom(session) {
if (typeof session !== "string") return null;
const res = await fetch(`${LIA}/session/verify`, {
method: "POST",
headers: { Authorization: `Bearer ${process.env.LIA_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ session }),
});
if (!res.ok) throw new Error(`Lia answered ${res.status}`); // a 401 means your key is wrong
const result = await res.json();
return result.valid ? result.playerId : null;
}
app.post("/api/save", async (req, res) => {
const playerId = await playerFrom(req.body.session);
if (!playerId) return res.status(401).json({ error: "session" });
await db.save(playerId, req.body.progress);
res.json({ ok: true });
});То же самое в Cloudflare Работнике:
export default {
async fetch(request, env) {
const body = await request.json();
const check = await fetch("https://api.lialabs.org/api/apps/v1/session/verify", {
method: "POST",
headers: { Authorization: `Bearer ${env.LIA_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ session: body.session }),
}).then((r) => r.json());
if (!check.valid) return Response.json({ error: "session" }, { status: 401 });
return Response.json({ hello: check.playerId });
},
};#Сохраняйте свою собственную сессию
Проверка каждого запроса работает, но это's круговой путь к Lia каждый раз. Для приложения, которое много общается со своим сервером, проверьте один раз, а затем используйте свое:
- Страница авторизуетсяОно отправляет токен с
Lia.init()к/api/login. - Ваш сервер проверяет его с помощью LiaОн получает идентификатор игрока и устанавливает ваш собственный cookie или токен для этого игрока.
- Все, что следует, использует вашеПока не закончится; затем страница отправляет свежую Lia сессию для входа снова.
Куки, установленные вашей страницей'свой сайт работает внутри Lia'фрейм как на вебе (куки для другого сайта могут быть заблокированы телефоном, поэтому держите ваш API на том же сайте или отправьте токен вместо). Для WebSocket проверьте токен в первом сообщении (или соединении'ваша строка запроса) перед присоединением игрока к чему-либо.
#Проверки, которые нужно сделать
validистинно. Токен, который'для другого приложения, из другого режима или после его окончания'не действителен.- Режим - это тот, который вы ожидаете. С вашим живым ключом вы'увидите только живые сессии, но если ваш сервер хранит оба ключа, проверьте
mode. - Использовать
playerIdот Lia, никогда не один, который отправляет страница. - Храните ваш ключ на сервере. Никогда не отправляйте его на страницу, даже на мгновение.
Автоматически переведено. Английский — источник истины. Читать на английском