[Laravel 8.x] 登入/登出時出現 419 頁面會話已超時
最近網站很常出現 419 錯誤,不知道具體發生原因,但大概可以猜是 csrf token 不相符造成。
我們新增一個 middleware 專門來處理這件事,內容如下:
一、設定 SESSION_DOMAIN
網路上也有人遇到相同的問題,解決的方式是在 .env 檔中設定 SESSION_DOMAIN。// 如果是在本地端,不用填 SESSION_DOMAIN= // 伺服端,設定網站 domain SESSION_DOMAIN="webdomain.com.tw"執行
php artisan cache:clear
。二、清 cookie
我設定好後上線想觀察一段時間看還會不會發生,殊不知網站直接變成無法登入,必須要清 cookie 才行,對於一個已經在使用中的網站,突然叫使用者清 cookie 超不合理的吧,這就衍生第二個問題,怎麼自動清 cookie?我們新增一個 middleware 專門來處理這件事,內容如下:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Cookie; class ForgotOldSessionCookies { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * * @return mixed */ public function handle($request, Closure $next) { Cookie::queue(new \Symfony\Component\HttpFoundation\Cookie('laravel_session', null, now()->subYear(1)->timestamp, '/')); Cookie::queue(new \Symfony\Component\HttpFoundation\Cookie('XSRF-TOKEN', null, now()->subYear(1)->timestamp, '/')); return $next($request); } }並且在 app/Http/Kernel.php 加入。
/** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' => [ ... \App\Http\Middleware\ForgotOldSessionCookies::class, ], ];不過比較可惜的是這個方法一直沒有上線,所以我不知道是否真的能解決問題,僅紀錄備用。
留言
張貼留言