Skip to content

ผู้ใช้

โมดูลผู้ใช้ให้ความสามารถในการรับข้อมูลและ Token ของผู้เล่นที่เข้าสู่ระบบแล้ว หากเกมไม่จำเป็นต้องเข้าสู่ระบบเพื่อใช้ฟีเจอร์ทั้งหมด ก็ไม่จำเป็นต้องใช้โมดูลนี้ แต่หากจำเป็นต้องใช้ ต้องเรียกใช้ API ที่เกี่ยวข้องของโมดูลนี้เพื่อใช้งานฟีเจอร์ต่างๆ

หลังจากอ่านหน้าJOGOS_SDK 简介 และส่วนที่เกี่ยวข้องกับเกมเอนจินของคุณแล้ว สามารถใช้งานฟีเจอร์ต่างๆ ดังนี้:

javascript
window.JOGOS_SDK.user;

รับข้อมูลผู้ใช้ปัจจุบัน

คุณสามารถใช้เมธอดต่อไปนี้เพื่อรับข้อมูลผู้เล่นปัจจุบัน:

javascript
try {
  const user = await window.JOGOS_SDK.user.getUser();
  console.log('Get user result', user);
} catch (err) {
  // จัดการข้อผิดพลาด
  console.error(err);
}

หากผู้เล่นปัจจุบันยังไม่ได้ลงทะเบียนหรือเข้าสู่ระบบ ระบบจะเปิดหน้าต่างเข้าสู่ระบบ/ลงทะเบียนโดยอัตโนมัติ และผู้ใช้ต้องลงทะเบียนหรือเข้าสู่ระบบสำเร็จก่อนจึงจะเล่นเกมต่อได้ มิฉะนั้นจะได้รับข้อผิดพลาด 401 未授权,请重新登录 (401 ไม่ได้รับอนุญาต โปรดเข้าสู่ระบบใหม่)

หากบัญชีของผู้เล่นปัจจุบันถูกระงับหรือยกเลิก ก็จะได้รับข้อความผิดพลาดที่เกี่ยวข้องเช่นกัน

โครงสร้างข้อมูลผู้เล่นที่ส่งกลับมาหากสำเร็จมีดังนี้:

typescript
// ข้อมูลผู้ใช้
export interface UserInfo {
  // รหัสผู้ใช้
  userId: string;
  // ชื่อผู้ใช้
  username: string;
  // URL รูปโปรไฟล์
  profilePictureUrl: string;
  // รหัสเกม
  gameId: number;
}

ชื่อผู้ใช้ของ JOGOS_SDK มีความยาว 6-20 ตัวอักษร สามารถประกอบด้วยตัวอักษร ตัวเลข จุด และขีดล่าง

หมายเหตุ: ข้อความแจ้งเตือนสำหรับเกมที่มีหลายตัวละครต่อบัญชี

JOGOS_SDKUserId จะสัมพันธ์กับบัญชีผู้ใช้แบบหนึ่งต่อหนึ่ง หากเกมของคุณอนุญาตให้สร้างตัวละครหลายตัวหรือมีเซิร์ฟเวอร์หลายตัวสำหรับสลับตัวละคร เซิร์ฟเวอร์ของคุณต้องจัดการลอจิกนี้ เพื่อป้องกันไม่ให้ผู้เล่นสูญเสียตัวละครหลายตัวหรือไม่สามารถสลับตัวละครได้

รับโทเคนผู้ใช้ (สำหรับเซิร์ฟเวอร์เกมของคุณ)

โทเคนผู้ใช้มีข้อมูลที่เกี่ยวข้องกับผู้เล่นที่เข้าสู่ระบบปัจจุบัน คุณควรส่งโทเคนนี้ไปยังเซิร์ฟเวอร์ของคุณเมื่อจำเป็น และตรวจสอบ/ถอดรหัสเพื่อดึงข้อมูลที่เกี่ยวข้อง ซึ่งมีประโยชน์สำหรับการเชื่อมโยงบัญชีผู้ใช้

คุณสามารถใช้เมธอดต่อไปนี้เพื่อรับโทเคนผู้ใช้:

javascript
try {
  const token = await window.JOGOS_SDK.user.getUserToken();
  console.log('Get token result', token);
} catch (err) {
  // จัดการข้อผิดพลาด
  console.error(err);
}

โทเคนมีอายุการใช้งาน 1 ชั่วโมง เราแนะนำไม่ให้เก็บโทเคนไว้ และควรเรียกใช้เมธอดนี้ทุกครั้งที่ต้องการโทเคน

หากผู้เล่นปัจจุบันยังไม่ได้ลงทะเบียนหรือเข้าสู่ระบบ ระบบจะเปิดหน้าต่างเข้าสู่ระบบ/ลงทะเบียนโดยอัตโนมัติ และผู้ใช้ต้องลงทะเบียนหรือเข้าสู่ระบบสำเร็จก่อนจึงจะเล่นเกมต่อได้ มิฉะนั้นจะได้รับข้อผิดพลาด 401 未授权,请重新登录 (401 ไม่ได้รับอนุญาต โปรดเข้าสู่ระบบใหม่)

หากบัญชีของผู้เล่นปัจจุบันถูกระงับหรือยกเลิก ก็จะได้รับข้อความผิดพลาดที่เกี่ยวข้องเช่นกัน

โทเคนที่ส่งกลับมาสามารถถอดรหัสและทดสอบได้ที่ jwt.io

ข้อมูลโทเคนที่ส่งกลับมาหากสำเร็จประกอบด้วยข้อมูลต่อไปนี้:

json
{
  "jti": "1899405772252258304",
  "sub": "{\"profilePictureUrl\":\"a33bf366e34d48e984a094fc923d7b06.png\",\"gameId\":\"1\",\"profileDefaultAvatar\":\"default-avatar.png\",\"userId\":\"88E1B72FED537C6943C85C28F639BE0B\",\"username\":\"55895999999999999999\"}",
  "iss": "com:jogos:sdk",
  "iat": 1741688600,
  "exp": 1745288600
}
ไม่ควรถอดรหัสโทเคนบนไคลเอ็นต์
โปรดอย่าถอดรหัสโทเคนผู้ใช้บนไคลเอ็นต์ เนื่องจากไม่ปลอดภัย

เมื่อคุณต้องการให้เซิร์ฟเวอร์ตรวจสอบความถูกต้องของคำขอ คุณควรส่งโทเคนไปยังเซิร์ฟเวอร์ของคุณ จากนั้นถอดรหัสและตรวจสอบโทเคน โดยใช้ คีย์สาธารณะโทเคนผู้ใช้ นี้ เราแนะนำให้ดึงคีย์ทุกครั้งที่ตรวจสอบโทเคน เนื่องจากคีย์อาจมีการเปลี่ยนแปลง

ต่อไปนี้เป็นตัวอย่างการถอดรหัสและตรวจสอบโทเคนโดยใช้ TypeScript และคีย์สาธารณะ:

typescript
import * as jwt from 'jsonwebtoken';

export interface CrazyTokenPayload {
  userId: string;
  username: string;
  gameId: string;
  profilePictureUrl: string;
}

export const decodeUserToken = async (token: string): Promise<CrazyTokenPayload> => {
  const publickKey = `...`; // ดึงจาก https://www.jogos.com/sdk/public-key.txt
  const payload = jwt.verify(token, key, { algorithms: ['RS256'] });

  return payload as CrazyTokenPayload;
};

การทดสอบในเครื่อง

เมื่อทดสอบในเครื่อง API ที่เกี่ยวข้องกับโมดูลผู้ใช้จะส่งกลับเพียงข้อมูลจำลองเท่านั้น