عزیزالله سعیدی
3 سال پیش توسط عزیزالله سعیدی مطرح شد
3 پاسخ

حل کردن باگ The token has been blacklisted در لاراول

ویب سایت که ساخته ام ترکیب از 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 3 سال پیش مطرح شد
0

@azizullahsaeidi سلام. باگ نیست که داره درست کارشو انجام میده!


عزیزالله سعیدی
تخصص : Database Developer
@azizullahsaeidi 3 سال پیش مطرح شد
0

سلام @farhadi عزیز درسته باگ نیست اما این یک exception است اما حالا برای ما یک issue است در sentry. برای اینکه از همین exception جلوگیری شود شما چه راه حل را توصیه میکنید؟ تشکر


محمدحسن فرهادی
تخصص : علاقه مند به کد نویسی
@farhadi 3 سال پیش مطرح شد
1

@azizullahsaeidi با احترام من صورت سوال تون رو چند بار خوندم ولی نمیفهمم
توی روت اصلی لاراول فولدر config فایل session
اونجا هم می تونید lifetime رو تنظیم کنید و هم expire on close رو برابر true قرار بدید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام