사용자
사용자 모듈은 현재 로그인한 플레이어의 정보와 Token
을 가져오는 기능을 제공합니다. 게임에서 로그인 없이 모든 기능을 이용할 수 있다면 이 모듈을 사용할 필요가 없습니다. 그렇지 않으면 해당 모듈의 인터페이스를 호출하여 필요한 기능을 구현해야 합니다.
JOGOS_SDK 소개
페이지와 해당 게임 엔진 관련 부분을 읽은 후 다음과 같이 관련 기능을 사용할 수 있습니다:
window.JOGOS_SDK.user;
현재 사용자 정보 가져오기
다음 방법으로 현재 플레이어의 정보를 조회할 수 있습니다:
try {
const user = await window.JOGOS_SDK.user.getUser();
console.log('사용자 정보 조회 결과', user);
} catch (err) {
// 예외 처리
console.error(err);
}
현재 플레이어가 등록되지 않았거나 로그인하지 않은 경우, 시스템은 자동으로 로그인/등록 대화 상자를 열어 사용자에게 등록 또는 로그인을 요청합니다. 그렇지 않으면 401 인증되지 않음, 다시 로그인하십시오
예외가 반환됩니다.
현재 플레이어의 계정이 정지 또는 해지된 경우에도 해당 예외 정보가 반환됩니다.
성공적으로 반환된 플레이어 객체 구조는 다음과 같습니다:
// 사용자 정보
export interface UserInfo {
// 사용자 ID
userId: string;
// 사용자 이름
username: string;
// 프로필 사진 URL
profilePictureUrl: string;
// 게임 ID
gameId: number;
}
JOGOS_SDK
의 사용자 이름은 6-20자이며 문자, 숫자, 마침표 및 밑줄을 포함할 수 있습니다.
JOGOS_SDK의 UserId는 플레이어 계정과 일대일로 대응됩니다. 게임에서 여러 게임 캐릭터를 생성하거나 여러 서버 간 캐릭터 전환이 가능한 경우, 서버 측에서 이 로직을 처리하여 플레이어의 여러 캐릭터가 손실되거나 전환되지 않도록 해야 합니다.
사용자 토큰 가져오기 (게임 서버 통합 필요)
사용자 토큰에는 현재 로그인한 플레이어의 관련 정보가 포함되어 있습니다. 필요할 때 서버로 전송하고 검증/디코딩하여 관련 정보를 추출해야 합니다. 이는 사용자 계정 연동에 매우 유용합니다.
다음 방법으로 사용자 토큰을 조회할 수 있습니다:
try {
const token = await window.JOGOS_SDK.user.getUserToken();
console.log('토큰 조회 결과', token);
} catch (err) {
// 예외 처리
console.error(err);
}
토큰의 유효 기간은 1시간입니다. 토큰을 저장하지 말고 필요할 때마다 이 메서드를 호출하는 것을 권장합니다.
현재 플레이어가 등록되지 않았거나 로그인하지 않은 경우, 시스템은 자동으로 로그인/등록 대화 상자를 엽니다. 그렇지 않으면 401 인증되지 않음, 다시 로그인하십시오
예외가 반환됩니다.
플레이어 계정이 정지 또는 해지된 경우에도 해당 예외 정보가 반환됩니다.
반환된 토큰은 jwt.io에서 디코딩하고 테스트할 수 있습니다.
성공적으로 반환된 토큰 정보에는 다음 데이터가 포함됩니다:
{
"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
와 공개 키를 사용하여 토큰을 디코딩하고 검증하는 예제입니다:
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;
};
로컬 테스트
로컬 테스트 시 사용자 모듈 관련 인터페이스는 모의 데이터만 반환합니다.