Skip to main content

restoreSession()

restoreSession()은 이미 고객사 로그인 세션이 유지되고 있는 브라우저 화면에서 MonitorDog SDK session만 다시 준비하는 함수입니다.

첫 로그인 시점에는 login()을 호출하고, MPA 페이지 이동, 새로고침, 새 탭 복원처럼 사용자가 다시 로그인한 것이 아닌 상황에서는 restoreSession()을 호출합니다.

restoreSession(request?: MonitorDogRestoreSessionRequest): Promise<MonitorDogSessionToken>

login()과의 차이

restoreSession()은 SDK access token을 발급받고 계정/정책 정보를 다시 로드하지만, MonitorDog login activity event를 전송하지 않습니다.

상황사용할 함수login event
사용자가 고객사 서비스에 실제로 로그인함login({ email })전송
MPA 페이지 이동 후 SDK를 다시 초기화함restoreSession()전송 안 함
브라우저 새로고침 후 고객사 로그인 쿠키가 유지됨restoreSession()전송 안 함
고객사 서비스에서 실제로 로그아웃함logout()logout event 전송

권장 구현

init()에서 restoreSessionTokenProvider를 등록합니다. 이 provider는 email을 브라우저에서 다시 받지 않고, 고객사 서버가 자체 HttpOnly 로그인 쿠키로 현재 사용자를 식별한 뒤 MonitorDog POST /v1/sdk/sessions를 server-to-server로 호출하는 endpoint를 호출합니다.

const detector = await MonitorDogDetector.init({
apiBaseUrl: "https://api.monitor.dog/v1",

sessionTokenProvider: async ({ email }) => {
const response = await fetch("/api/monitordog/sdk-session", {
method: "POST",
headers: { "content-type": "application/json" },
credentials: "include",
body: JSON.stringify({ email }),
});

if (!response.ok) {
throw new Error("Failed to issue MonitorDog SDK session");
}

return response.json();
},

restoreSessionTokenProvider: async () => {
const response = await fetch("/api/monitordog/sdk-session/restore", {
method: "POST",
credentials: "include",
});

if (!response.ok) {
throw new Error("Failed to restore MonitorDog SDK session");
}

return response.json();
},

onDetect,
});

고객사 서버의 /api/monitordog/sdk-session/restore는 기존 로그인 세션에서 사용자 email을 확인한 뒤 같은 MonitorDog SDK session 발급 API를 호출합니다.

export async function POST(request: Request) {
const email = await getCurrentUserEmailFromHttpOnlyCookie(request);

const response = await fetch("https://api.monitor.dog/v1/sdk/sessions", {
method: "POST",
headers: {
"content-type": "application/json",
authorization: `Bearer ${process.env.MONITORDOG_PARTNER_API_KEY}`,
},
body: JSON.stringify({ email }),
});

return new Response(await response.text(), {
status: response.status,
headers: { "content-type": "application/json" },
});
}

사용 예시

첫 로그인 화면에서는 login()을 호출합니다.

await detector.login({ email: currentUser.email });
await detector.start();

페이지 이동 또는 새로고침 후에는 고객사 로그인 쿠키가 유지되는지 먼저 확인하고 restoreSession()을 호출합니다.

const detector = await MonitorDogDetector.init({
apiBaseUrl: "https://api.monitor.dog/v1",
sessionTokenProvider,
restoreSessionTokenProvider,
onDetect,
});

await detector.restoreSession();
await detector.start();

email 기반 호환 경로

restoreSessionTokenProvider를 아직 추가할 수 없는 기존 연동에서는 restoreSession({ email })을 사용할 수 있습니다.

await detector.restoreSession({
email: currentUser.email,
});

이 경우 SDK는 기존 sessionTokenProvider({ email })를 호출해 SDK token을 발급받습니다. 단, 이 방식은 브라우저가 다시 email을 전달해야 하므로 MPA 복원 흐름에서는 restoreSessionTokenProvider를 권장합니다.

실패 처리

restoreSession()은 다음 상황에서 실패할 수 있습니다.

  • restoreSessionTokenProvider가 SDK token 발급에 실패한 경우
  • restoreSessionTokenProvider 없이 restoreSession()을 호출했고 email도 전달하지 않은 경우
  • 고객사 서버의 로그인 쿠키가 만료되어 현재 사용자를 식별할 수 없는 경우
  • 식별된 email이 MonitorDog에 등록되어 있지 않은 경우
  • 계정 정보 또는 감지 정책 조회가 실패한 경우

SDK token 발급 실패는 SESSION_TOKEN_FAILED, 계정/정책 로딩 실패는 ACCOUNT_POLICY_FAILEDonAuthError에 전달됩니다.

주의사항

  • restoreSession()은 고객사 로그인 세션을 생성하거나 연장하지 않습니다.
  • 고객사 로그인 유지는 고객사 서버의 HttpOnly session cookie가 담당합니다.
  • MonitorDog partner API key는 복원 endpoint 안의 서버 코드에서만 사용하고 브라우저에 노출하지 않습니다.
  • MonitorDog /auth/v2, /v1/auth/cookie는 MonitorDog 일반 웹 로그인 쿠키 흐름용 API이며 SDK MPA 복원용 API가 아닙니다.
  • restoreSession() 성공만으로 detector가 실행되지는 않습니다. detection 실행은 await detector.start()를 별도로 호출해야 합니다.