Latihan 1: Refresh Token Rotation — Auth

Latihan 1 dari materi Refresh Token Rotation di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Lengkapi rotateTokens(refreshToken, store) di kode awal. store adalah Map dengan key string token dan value { userId, used, valid }. Kode awal sudah mengisi store dengan "refresh_user42_1", biarkan begitu.

  1. Token gak ada di store: kembalikan { success: false, error: "invalid" }.

  2. Token sudah dicabut (valid: false): kembalikan { success: false, error: "revoked" }.

  3. Token sudah dipakai (used: true): cabut seluruh family-nya, yaitu ubah valid semua entry dengan userId yang sama jadi false, lalu kembalikan { success: false, error: "reuse_detected" }. Di latihan ini family = semua token milik user itu.

  4. Token belum dipakai: ubah used entry itu jadi true, lalu buat dua nama token baru dengan nomor store.size + 1, dihitung sebelum entry baru ditambahkan:

    • "access_" + userId + "_" + (store.size + 1)
    • "refresh_" + userId + "_" + (store.size + 1)

    Tambahkan refresh token baru itu ke store dengan value { userId, used: false, valid: true }, lalu kembalikan { success: true, newAccessToken, newRefreshToken }.

Baris-baris console.log di kode awal sudah ada, biarkan begitu. Output-nya harus persis tujuh baris ini, berurutan:

  1. true (rotasi pertama berhasil)
  2. true (refresh_user42_1 sekarang used)
  3. false (token yang sama dipakai lagi)
  4. reuse_detected
  5. false (valid entry itu sekarang false)
  6. false (token yang gak dikenal)
  7. invalid

Dicek juga dengan store baru berisi "refresh_u9_1": rotasi pertama success-nya true, rotasi kedua error-nya "reuse_detected", dan setelah itu valid entry-nya false. Token baru hasil rotasi pertama juga ikut dicabut, jadi menukarnya dijawab revoked, sedangkan token milik user lain tetap valid.

Hint