کوکی‌ها و Session‌ها

فینچ API هایی جداگانه برای کوکی‌های سمت کلاینت و session‌های سمت سرور ارائه می‌دهد.

کوکی‌ها

کوکی‌ها در مرورگر کاربر ذخیره می‌شوند.

خواندن کوکی

var theme = rq.getCookie('theme', def: 'light');

تنظیم کوکی

// کوکی plain-text (safe: false)
rq.addCookie('theme', 'dark', safe: false);

// کوکی رمزگذاری‌شده (safe: true)
rq.addCookie('user_id', user.id.toString(), safe: true);

پارامتر safe کوکی را با cookiePassword از FinchConfigs رمزگذاری می‌کند.

حذف کوکی

rq.removeCookie('theme');

مثال کامل

Future<String> setTheme() async {
  var theme = rq.get<String>('theme', def: 'light');
  rq.addCookie('theme', theme, safe: false);
  return rq.redirect(url: '/settings');
}

Session‌ها

Session‌ها در سمت سرور ذخیره می‌شوند (فینچ یک کوکی رمزگذاری‌شده برای نگه‌داشتن Session ID استفاده می‌کند).

خواندن Session

var userId = rq.getSession('userId', def: '');

نوشتن Session

rq.addSession('userId', user.id);
rq.addSession('role', 'admin');

حذف Session

rq.removeSession('userId');

پاک کردن تمام Session‌ها

rq.clearSession();

مثال: ورود / خروج

// ورود
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': 'اعتبارنامه نامعتبر'});
  }

  rq.addSession('userId', user.id);
  return rq.redirect(url: '/dashboard');
}

// خروج
Future<String> logout() async {
  rq.clearSession();
  return rq.redirect(url: '/login');
}

کوکی‌های رمزگذاری‌شده

زمانی که safe: true استفاده می‌کنید، مقدار کوکی با cookiePassword که در FinchConfigs تعریف شده رمزگذاری می‌شود. همیشه از یک password قوی و منحصربه‌فرد در محیط production استفاده کنید:

FinchConfigs(
  cookiePassword: env['COOKIE_PASSWORD'] ?? 'change-me-in-production',
)