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.
-
Token gak ada di store: kembalikan { success: false, error: "invalid" }.
-
Token sudah dicabut (valid: false): kembalikan { success: false, error: "revoked" }.
-
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.
-
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:
true (rotasi pertama berhasil)
true (refresh_user42_1 sekarang used)
false (token yang sama dipakai lagi)
reuse_detected
false (valid entry itu sekarang false)
false (token yang gak dikenal)
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.