[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,
],
];
不過比較可惜的是這個方法一直沒有上線,所以我不知道是否真的能解決問題,僅紀錄備用。
留言
張貼留言