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.
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.