指南
在您的服务器上验证
复制页面
知道哪个玩家在调用您的服务器。从页面发送一个会话令牌,用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验证它它获取玩家ID,并为该玩家设置你自己的cookie或token。
- 之后的所有内容都使用你的直到它结束;然后页面会发送一个新的Lia 会话以重新登录。
由你的页面设置的Cookie'自己的网站在Lia内工作'的框架如同在网页上(对于其他网站的 cookies 可能会被手机阻止,因此请将你的 API 保持在同一网站或改用令牌)。对于 WebSocket,在第一条消息中验证令牌(或连接'的查询字符串)在加入玩家到任何地方之前。
#需要进行的检查
valid是真。 一个令牌'的另一个应用,从其他模式或超过其结束时间'有效。- 模式是你所期望的。 使用您的实时密钥,您'你只会看到实时会话,但如果你的服务器同时保存了两个密钥,请检查
mode. - 使用
playerId从Lia,从不来自页面发送的。 - 将您的密钥保存在您的服务器上。 即使只是一瞬间,也永远不要将其发送到页面。
自动翻译。英语是真实来源。 阅读英文