Store guest user language preference in long-lived cookie
Changes: - LocaleController: Set 1-year cookie when language is changed - SetLocale middleware: Check cookie after session, before default Priority: User DB > Session > Cookie > Default This allows guest users to retain their language preference even after closing the browser (persists for 1 year). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,7 @@ public function update(Request $request)
|
||||
|
||||
$locale = $validated['locale'];
|
||||
|
||||
// Save to session (works for both authenticated and guest users)
|
||||
// Save to session for immediate effect
|
||||
$request->session()->put('locale', $locale);
|
||||
|
||||
// If authenticated, also save to user record for persistence
|
||||
@@ -28,6 +28,9 @@ public function update(Request $request)
|
||||
Auth::user()->update(['locale' => $locale]);
|
||||
}
|
||||
|
||||
// Set long-lived cookie (1 year) for guest users
|
||||
cookie()->queue('locale', $locale, 525600); // 525600 minutes = 1 year
|
||||
|
||||
return redirect()->back()->with('success', __('messages.settings.language_updated'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,20 +27,30 @@ class SetLocale
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* Priority order:
|
||||
* 1. Authenticated user's database preference
|
||||
* 2. Session (for immediate effect after changing)
|
||||
* 3. Cookie (long-term storage for guest users)
|
||||
* 4. Default locale from config
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$locale = config('app.locale', 'en');
|
||||
|
||||
// Check authenticated user's preference
|
||||
// Priority 1: Check authenticated user's preference
|
||||
if (Auth::check() && Auth::user()->locale) {
|
||||
$locale = Auth::user()->locale;
|
||||
}
|
||||
// Check session (for immediate effect after changing)
|
||||
// Priority 2: Check session (for immediate effect after changing)
|
||||
elseif ($request->session()->has('locale')) {
|
||||
$locale = $request->session()->get('locale');
|
||||
}
|
||||
// Priority 3: Check cookie (long-term storage for guest users)
|
||||
elseif ($request->cookie('locale')) {
|
||||
$locale = $request->cookie('locale');
|
||||
}
|
||||
|
||||
// Validate locale
|
||||
if (!array_key_exists($locale, self::SUPPORTED_LOCALES)) {
|
||||
|
||||
Reference in New Issue
Block a user