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.

var theme = rq.getCookie('theme', def: 'light');
// 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.

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',
)