- خطای 419/page expired چیست؟
اول از همه باید این رو بگویم که این خطا، به این دو دلیل رخ میدهد:
1. مدت زمان طولانی است که درخواست به سرور ارسال نشده است و به همین دلیل token منتقضی میشود.
2. ممکن است که شما فیلد @csrf را درون form خود اضافه نکرده باشید، پس توکنی که فرم انتظار دارد تعریف نشده است و خطا دریافت خواهید کرد.
- راهکار
راهکار شماره یک: صفحه را مجددا بارگذاری کنید (refresh)
راهکار شماره دو: فیلد @csrf را مثل کد زیر درون فرم خود قرار دهید:
<form action="/action" method="post">
@csrf
// input توکن اینجا قرار خواهد گرفت
</form
فریمورک لاراول یکی از فریمورک هایی میباشد که درباره امنیت بسیار حساس میباشد بطور مثال در شما باید یک فیلد _token را درون فرم خود قرار بدهید تا لاراول متوجه بشود که آیا این درخواست از طریق کامپیوتر شما ارسال شده است یا توسط یک شخص دیگر (هکر) ارسال شده است. لاراول از csrf_token به خاطر این بررسی ساده استفاده میکند.
خطای 419/page expired چیست؟
اول از همه باید این رو بگویم که این خطا، به این دو دلیل رخ میدهد:
1. مدت زمان طولانی است که درخواست به سرور ارسال نشده است و به همین دلیل token منتقضی میشود.
2. ممکن است که شما فیلد @csrf را درون form خود اضافه نکرده باشید، پس توکنی که فرم انتظار دارد تعریف نشده است و خطا دریافت خواهید کرد.
راهکار
راهکار شماره یک: صفحه را مجددا بارگذاری کنید (refresh)
راهکار شماره دو: فیلد @csrf را مثل کد زیر درون فرم خود قرار دهید:
<form action="/action" method="post">
@csrf
// input توکن اینجا قرار خواهد گرفت
</form
در اینجا یک راهکار دیگر هم برای انجام اینکار وجود دارد ما میتوانیم که توکن امنیتی CSRF را برای یک یا چند route غیرفعال بکنیم. برای اینکار باید ابتدا وارد فایل `VerifyCsrfToken
` بشوید. بطور پیشفرض تمامی routeهایی که با روش GET کار میکنند نیازی به وارد کردن CSRF توکن ندارد. اگر شما میخواهید که توکن امنیتی CSRF را برای یک یا چند route خاص غیرفعال کنید باید وارد فایل `VerifyCsrfToken
` بشوید و داخل متغیر $except آدرس روتی که میخواهد CSRF را برایش غیرفعال کنید وارد کنید. شما در این آرایه میتوانید هر تعداد route را که نیاز به CSRF توکن ندارند را قرار دهید و غیرفعال کنید. در اینجا مثالی برای شما آوردهایم:
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
protected $except = [
'articles/*', // غیر فعال کردن CSRF توکن برای آدرسهایی که با articles شروع میشوند
];
}
در این مثال تمامی route هایی که با `articles` شروع میشوند نیازی به وارد کردن CSRF توکن ندارند.
اگر شما از راهکارهایی که در بالای مقاله گفتیم را استفاده کرده باشید دیگر خطای 419 در برنامه خود نخواهید داشت، چون شما میدانید که باید صفحه را بارگذاری مجدد (refresh) کنید.
منبع: educative