Lia开发者

指南

知道哪个玩家在调用您的服务器。从页面发送一个会话令牌,用Lia验证一次,然后保持您自己的会话。

任何人都可以向您的服务器发送请求,内容为 "I'我是玩家 p_3f9c…"。所以页面会发送一个 会话令牌 该Lia签名,并且你的服务器会问Lia是谁的。

#在你的页面中

在你的第一次请求中发送令牌,或在任何重要操作中发送。令牌持续 15 分钟; Lia.session() 总是会提供一个新的。

api.js
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();
}

#在您的服务器上

server.js (Node.js)
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 工人中相同:

worker.js
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。对于一个经常与服务器通信的应用,验证一次后,就使用你自己的:

  1. 页面登录它将代币从 Lia.init() 到 /api/login.
  2. 您的服务器通过Lia验证它它获取玩家ID,并为该玩家设置你自己的cookie或token。
  3. 之后的所有内容都使用你的直到它结束;然后页面会发送一个新的Lia 会话以重新登录。

由你的页面设置的Cookie'自己的网站在Lia内工作'的框架如同在网页上(对于其他网站的 cookies 可能会被手机阻止,因此请将你的 API 保持在同一网站或改用令牌)。对于 WebSocket,在第一条消息中验证令牌(或连接'的查询字符串)在加入玩家到任何地方之前。

#需要进行的检查

  • valid 是真。 一个令牌'的另一个应用,从其他模式或超过其结束时间'有效。
  • 模式是你所期望的。 使用您的实时密钥,您'你只会看到实时会话,但如果你的服务器同时保存了两个密钥,请检查 mode.
  • 使用 playerId 从Lia,从不来自页面发送的。
  • 将您的密钥保存在您的服务器上。 即使只是一瞬间,也永远不要将其发送到页面。

自动翻译。英语是真实来源。 阅读英文

输入以搜索每一页、方法和端点。