Cookies en sessies
Finch biedt afzonderlijke API's voor client-side cookies en server-side sessies.
Cookies
Cookies worden opgeslagen in de browser van de gebruiker.
Een cookie lezen
var theme = rq.getCookie('theme', def: 'light');
Een cookie instellen
// Onversleutelde cookie (safe: false)
rq.addCookie('theme', 'dark', safe: false);
// Versleutelde cookie (safe: true)
rq.addCookie('user_id', user.id.toString(), safe: true);
De safe-parameter versleutelt de cookie met cookiePassword uit FinchConfigs.
Een cookie verwijderen
rq.removeCookie('theme');
Volledig voorbeeld
Future<String> setTheme() async {
var theme = rq.get<String>('theme', def: 'light');
rq.addCookie('theme', theme, safe: false);
return rq.redirect(url: '/settings');
}
Sessies
Sessies worden server-side opgeslagen (Finch gebruikt een versleutelde cookie om de sessie-ID bij te houden).
Sessie lezen
var userId = rq.getSession('userId', def: '');
Sessie schrijven
rq.addSession('userId', user.id);
rq.addSession('role', 'admin');
Sessiewaarde verwijderen
rq.removeSession('userId');
Alle sessies wissen
rq.clearSession();
Voorbeeld: inloggen / uitloggen
// Inloggen
Future<String> login() async {
var email = rq.get<String>('email', def: '');
var password = rq.get<String>('password', def: '');
var user = await UserModel().findByCredentials(email, password);
if (user == null) {
return rq.renderView(path: 'auth/login', params: {'error': 'Ongeldige inloggegevens'});
}
rq.addSession('userId', user.id);
return rq.redirect(url: '/dashboard');
}
// Uitloggen
Future<String> logout() async {
rq.clearSession();
return rq.redirect(url: '/login');
}
Versleutelde cookies
Wanneer je safe: true gebruikt, wordt de cookiewaarde versleuteld met het cookiePassword dat is gedefinieerd in FinchConfigs. Gebruik altijd een sterk, uniek wachtwoord in productie:
FinchConfigs(
cookiePassword: env['COOKIE_PASSWORD'] ?? 'change-me-in-production',
)