Study
Yesod

Session & Autentikasi Dasar

Penjelasan

Yesod menyediakan session terenkripsi bawaan yang bisa diakses lewat fungsi seperti setSession dan lookupSession di dalam Handler, cocok untuk menyimpan data kecil seperti preferensi user atau flash message. Untuk autentikasi penuh, scaffolding Yesod sudah menyertakan library yesod-auth yang mendukung berbagai plugin login seperti email/password, OAuth (Google, GitHub), atau HashDB untuk password ter-hash di database sendiri. Setelah plugin autentikasi dikonfigurasi di Foundation.hs lewat instance YesodAuth, kita bisa memakai fungsi requireAuthId di handler untuk memastikan hanya user yang sudah login yang bisa mengakses route tertentu, dan maybeAuthId untuk mengecek status login tanpa memaksa redirect.

Contoh Konsep

instance YesodAuth App where
  type AuthId App = UserId
  authenticate creds = runDB $ do
    x <- getBy $ UniqueEmail (credsIdent creds)
    case x of
      Just (Entity uid _) -> return $ Authenticated uid
      Nothing -> Authenticated <$> insert (User (credsIdent creds) "")

  authPlugins _ = [authHashDB (Just . UniqueEmail)]

-- Di handler yang perlu login:
getProdukNewR :: Handler Html
getProdukNewR = do
  uid <- requireAuthId
  defaultLayout [whamlet|<p>Halo user #{show uid}|]

Praktikum

Lengkapi handler getArtikelNewR agar mewajibkan user login dengan requireAuthId sebelum menampilkan form artikel baru.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Gunakan maybeAuthId (bukan requireAuthId) pada halaman publik yang tampilannya sedikit berbeda untuk user login vs tamu, supaya tidak memaksa redirect ke halaman login.