Latihan 1: Magic Link Authentication — Auth

Latihan 1 dari materi Magic Link Authentication di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Lengkapi createMagicLinkStore() di kode awal. Function itu mengembalikan object dengan dua method:

  1. issue(email, now): buat entri untuk email itu, lalu kembalikan token-nya. Token-nya 32 byte acak dari crypto.getRandomValues(new Uint8Array(32)), ditulis sebagai hex, jadi 64 karakter 0-9a-f. Token yang dirakit dari email dan waktu bisa dihitung ulang oleh siapa pun yang tahu email-nya. Entrinya mencatat email, kapan link itu kedaluwarsa, dan apakah sudah dipakai. Link berlaku 15 menit sejak now, dan semua waktu dihitung dalam milidetik.
  2. verify(token, now): cari entri lewat token-nya, lalu periksa berurutan:
    • gak ketemu: kembalikan { ok: false, reason: 'not_found' }
    • sudah pernah dipakai: kembalikan { ok: false, reason: 'already_used' }
    • now sudah sampai atau lewat waktu kedaluwarsa: kembalikan { ok: false, reason: 'expired' }
    • selain itu sah: tandai entrinya sudah dipakai, lalu kembalikan { ok: true, email }

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

  1. true (token-nya 64 karakter hex)
  2. true
  3. [email protected]
  4. false
  5. already_used
  6. expired
  7. not_found

Dicek juga dengan store baru: issue('[email protected]', 50), lalu verify token itu di waktu 60 dan 70. Hasilnya harus true|true|[email protected]|already_used: token-nya 64 karakter hex, verifikasi pertama sah untuk [email protected], yang kedua already_used. Dua link untuk email dan waktu yang sama juga harus punya token berbeda.

Hint