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_FAILED로 onAuthError에 전달됩니다.
주의사항
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()를 별도로 호출해야 합니다.