Skip to content

抖音小游戏登录教程

通过抖音小游戏对应的服务端接口完成登录(含 access_tokenjscode2session 流程)。

1. 获取 access_token

用于调用抖音相关服务端能力(服务端带 Redis 缓存)。

  • GET /api/minigame/douyin/access_token

请求示例

bash
curl "http://localhost:2567/api/minigame/douyin/access_token"

响应示例

json
{
  "success": true,
  "message": "操作成功!",
  "data": {
    "access_token": "ACCESS_TOKEN",
    "expires_in": 7200
  }
}

2. 抖音登录(jscode2session)

前置条件

  • codeanonymous_code 至少传一个(与抖音侧登录方式一致)

请求

  • GET /api/minigame/douyin/login

Query 参数:

  • code:抖音登录 code(非匿名)
  • anonymous_code:匿名 code(可选)

请求示例

bash
curl "http://localhost:2567/api/minigame/douyin/login?code=DOUYIN_CODE"
bash
curl "http://localhost:2567/api/minigame/douyin/login?anonymous_code=ANONYMOUS_CODE"

服务端行为概要

  1. 向抖音 jscode2session 换取 openidanonymous_openidsession_key、可选 unionid 等。
  2. openidanonymous_openidunionid 顺序取第一个非空值作为本地用户键,查找或创建 users 记录(AuthService.findOrCreateMinigameUserplatform: 'douyin');新建用户同样 不会在响应中返回密码
  3. 签发 JWT tokenuserId数据库用户主键(UUID);令牌写入 Redis 的规则与微信登录一致。

响应示例

json
{
  "success": true,
  "message": "操作成功!",
  "data": {
    "error": 0,
    "openid": "OPEN_ID",
    "session_key": "SESSION_KEY",
    "anonymous_openid": "",
    "unionid": "",
    "errcode": 0,
    "errmsg": "",
    "message": "",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "username": "mg_douyin_xxxxxxxx",
      "email": "douyin_xxxxxxxx@minigame.local",
      "nickname": null,
      "avatar": null,
      "openid": "OPEN_ID",
      "guildId": null,
      "status": 1,
      "createdAt": "2026-05-02T12:00:00.000Z",
      "updatedAt": "2026-05-02T12:00:00.000Z",
      "version": 1
    }
  }
}

匿名登录时 openid 可能为空,此时 user.openid 会存匿名 id 或 unionid(与 findOrCreateMinigameUser 入参一致)。

字段说明(data

字段说明
error抖音错误号,0 表示成功。
openid / anonymous_openid / unionid平台侧用户标识(视登录方式返回)。
session_key会话密钥,敏感;建议仅服务端使用。
errcode / errmsg / message错误细节(成功时多为空或 0)。
token本项目 JWT 访问令牌
user本地用户资料,不含 password

3. 后续(接入房间 / HTTP 鉴权)

  • 使用 token 接入 Colyseus 房间与受保护 HTTP 接口;JWT 内 userId 为库主键,与 openid 无必然相等关系。
  • 需要展示资料时以 user 或后续业务接口为准。

4. 安全提示

  • session_key 请勿在前端明文长期存储或日志中输出;生产环境可评估是否从对外 API 中省略该字段(需改服务端实现)。