Session
@gaman/session
adalah middleware session
untuk GamanJS.
Ini membantu Anda mengelola session
pengguna menggunakan cookies
dan penyimpanan eksternal opsional.
Anda dapat dengan mudah mengonfigurasi opsi sesi seperti nama cookies
, masa berlaku, keamanan, dan apakah cookies
tersebut akan berfungsi dalam permintaan lintas situs.
Install
Section titled “Install”GamanJS adalah kerangka kerja untuk aplikasi backend, Anda dapat menginstall menggunakan manajer paket favorit Anda:
npm install @gaman/session
pnpm install @gaman/session
yarn install @gaman/session
bun install @gaman/session
import { session } from "@gaman/session"
defineBootstrap((app) => { app.mount( session({ crossSite: false // if you want 2 applications such as Vite React + GamanJS, crossSite: make it true }) )});
async (ctx) => { await ctx.session.set({userId: '...'});
await ctx.session.get(); await ctx.session.delete();}
Cross Site
Section titled “Cross Site”Simplenya gini semisal anda membuat aplikasi backend
sama frontend
, frontend pakai vite + react
backend pakai gamanjs
nah semisal URL frontend https://frontend.com
dan backend https://backend.com
nah kedua itu saling berhubungan lewat cookies.
Ketika dari frontend berhasil login -> request fetch -> backend -> response Set-Cookie: sesion
otomatis di vite + react
ada cookies bernama gaman-session-sid
dia ini bersifat httpOnly
jadi tidak bisa di ambil dari javascript
nah sekarang client sudah ada session
jadi ketika dia request ke backend, backend otomatis dapat cookies gaman-session-sid
. ya kasarannya gitu :)
pastikan credentials nya di kasih true biar dari backend bisa ngirim cookies ke client!
import { session } from "@gaman/session"import { cors } from "@gaman/cors"
defineBootstrap((app) => {
app.mount( cors({ origin: ['https://frontend.com'] // set client app url, credentials: true // must be true }), session({ crossSite: true //<- set true, domain: '.frontend.com' // pastikan ini juga di atur tapi kalau masih tahap development ga wajib }) )});
Create route
Section titled “Create route”kita coba buat route login disini untuk membuat session, semisal berhasil login
route.post('/login', async (ctx) => {
await ctx.session.set({ userId: 'abogoboga' }); // set session
return Res.json({message: "OK!"});});
Client Side
Section titled “Client Side”disini di server client side anggap aja kita memakai html biasa, disini request ke url /login
backend memakai fetch
<script> fetch('https://backend.com/login', { method: "POST", credentials: 'include' // must be include });
</script>
pastikan credentials: 'include'
biar bisa nerima cookies dari backend dan otomatis ke set ke client side (HTTP Only)