# 小游戏登录态管理
小游戏可以通过 TapTap 提供的登录能力方便地获取用户身份标识,快速建立小游戏内的用户体系。
# 登录流程时序
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 小游戏 │ │开发者服务器│ │ TapTap │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
│ 1. tap.login() │ │
│─────────────────────────────────────────────────────────────>│
│ │ │
│ 2. 返回 code │ │
│<─────────────────────────────────────────────────────────────│
│ │ │
│ 3. 发送 code │ │
│─────────────────────────────>│ │
│ │ │
│ │ 4. code2Session(code) │
│ │─────────────────────────────>│
│ │ │
│ │ 5. openid + session_key │
│ │<─────────────────────────────│
│ │ │
│ 6. 返回自定义登录态 │ │
│<─────────────────────────────│ │
│ │ │
# 说明
- 小游戏客户端调用 tap.login() 获取临时登录凭证 code,并回传到开发者服务器
- 开发者服务器调用 code2Session 接口,换取用户唯一标识 openid、unionid 和会话密钥 session_key
之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
注意:
- 会话密钥
session_key是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小游戏,也不应该对外提供这个密钥 - 临时登录凭证 code 只能使用一次
# 登录态维护
小游戏登录态具有时效性,开发者在小游戏客户端使用登录态时,可先调用 tap.checkSession() 检测当前用户登录态是否有效。登录态过期后,开发者可以调用 tap.login() 重新获取登录态。
session_key 具有唯一性,在使用小游戏时,同一用户在同一时刻仅有一个有效的 session_key。
通过 tap.login() 接口获得的用户登录态拥有一定的时效性。用户越久未使用小游戏,用户登录态越有可能过期。反之如果用户一直在使用小游戏,则用户登录态一直保持有效。具体时效逻辑由应用维护,对开发者透明。
# 安全说明
为了保证用户数据和业务安全,开发者服务器在使用 session_key 时需注意以下几点:
- session_key 是对用户数据进行加密签名的密钥,使用 code 换取的 session_key 需要保存在服务器中,不应该传递给小游戏客户端
- 开发者应该通过自定义登录态管理用户状态,不应该直接使用 session_key 作为登录态管理
- 开发者通过 session_key 加解密数据时,需要对数据的有效性进行校验,防止篡改
