ویب سایت که ساخته ام ترکیب از vuejs و laravel 8 میباشد. من در سمت backend از jwt-auth استفاده کرده ام. حال از سمت frontend حدود ۲۰ الی ۳۰ درخواست به سمت backend ارسال میکنم و اگر کاربر بیش از نیم ساعت از ویب سایت استفاده نکند با ارسال اولین درخواست عملیه logout صورت میگیرد.
حال اگر کاربر ۳۱ دقیقه بعد ویب سایت را reload کند مشکل The token has been blacklisted رخ میدهد. چون از قسمت فرانت حدود ۲۰ درخواست به صورت همزمان به سمت سرور میرود. زمانی کی اولین درخواست توسط Middleware چک میشود و می بیند کی بیش از نیم ساعت فعالیت نداشته است عملیه logout را اجرا میکند اما مابقی درخواست ها با مشکل The token has been blacklisted برمیخورد. چون توکن را دارد اما حدود چند ملی ساینه قبل توسط درخواست قبلی logout شده است.
برای حل کردن این مشکل شما کدام راه حل را پیشنهاد میکنید؟
Tymon\JWTAuth\Exceptions\TokenBlacklistedException /api/userlist/my-journey
The token has been blacklisted
/app/Http/Middleware/UserActivityMiddleware.php in App\Http\Middleware\UserActivityMiddleware::handle at line 8
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()) {
$user = Auth::user();
$userLastActivity = $user->lastActivity ? $user->lastActivity->updated_at : null;
if ($userLastActivity != null) {
if (now()->diffInMinutes($userLastActivity) > 30) {
// delete the last activity
userLastActivity::where('user_id', (int) $user->id)->delete();
// logout user
Auth::logout();
}
}
}
return $next($request);
}
باگ The token has been blacklisted در لین ۱۱ رخ میدهد.
سلام @farhadi عزیز درسته باگ نیست اما این یک exception است اما حالا برای ما یک issue است در sentry. برای اینکه از همین exception جلوگیری شود شما چه راه حل را توصیه میکنید؟ تشکر
@azizullahsaeidi با احترام من صورت سوال تون رو چند بار خوندم ولی نمیفهمم
توی روت اصلی لاراول فولدر config فایل session
اونجا هم می تونید lifetime رو تنظیم کنید و هم expire on close رو برابر true قرار بدید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟