🔥 با کمک هوش مصنوعی در کمتر از 6 ماه فول‌استک شوید ...
۰ ثانیه
۰ دقیقه
۰ ساعت
۹ شقایق خرم‌آبادی
سوال در مورد متغییر $jwt_token
جامعه پی اچ پی ایجاد شده در ۱۱ شهریور ۱۴۰۲

شلام وقت بخیر اگه اشتباه نکنم متغییر $jwt_token اون توکنی هستش که ساخته شده ولی در صورتی متوجه نمیشم از کجا آومد و پاس داده شده به فانکشن isValidToken h اگه ممکنه در مورد ش یه توضیح بدی ممنون میشم

function createApiToken($user): string
{
    $payload = ['user_id' => $user->id];
    return JWT::encode($payload, 'JWT_KEY', 'HS256');
}
function isValidToken($jwt_token): bool|stdClass
{
    try{
        $payload = JWT::decode($jwt_token, new Key('JWT_KEY', 'HS256'));
        return $payload;
    }catch(Exception $e){
        return false;
    }
}

سلام، لطفا کد قسمتی که از فانکشن isValidToken استفاده میکنید رو بفرستید تا بتونم راهنمایی تون کنم.

آراد ملایری ۱۲ شهریور ۱۴۰۲، ۲۲:۴۵

سلام من بالا فرستادمش اینم یک بار دیگه فرستادم

function isValidToken($jwt_token): bool|stdClass
{
    try{
        $payload = JWT::decode($jwt_token, new Key('JWT_KEY', 'HS256'));
        return $payload;
    }catch(Exception $e){
        return false;
    }
}


شقایق خرم‌آبادی ۱۳ شهریور ۱۴۰۲، ۱۳:۴۵
$token = getBearerToken();
$user = isValidToken($token);
if(!$user)
  Response::respondAndDie(['Invalid Token!'],Response::HTTP_UNAUTHORIZED);
شقایق خرم‌آبادی ۱۳ شهریور ۱۴۰۲، ۱۳:۴۷

الان کجاش رو دقیقا متوجه نمیشن حسین جان؟

آراد ملایری ۱۳ شهریور ۱۴۰۲، ۱۴:۵۱
$jwt_token

اینو متوجه نمیشم که از کجا اومد جای دیگه از برنامه ازشتفاده نشده این متغییر رو متوجه نشدم چجوری اومد ؟من یه خورده با این متغییرها مشکل دارم

شقایق خرم‌آبادی ۱۳ شهریور ۱۴۰۲، ۱۷:۴۶

حسین جان، متغییری که میگین توی تابع isValidToken استفاده شده و به کلاس JWT برای دیکد شدن فرستاده میشه، در واقع برای کاربر یه jwt توکن میسازیم و هروقت نیاز به اعتبار سنجی کاربر داشتیم اون توکنی که تولید شده رو به تابع isValidToken پاس میدیم که داخل اون تابع اول توکنی که پاس دادیم رو دیکد میکنه و اگه مشکلی نداشت (دیکد شد) مقدار واقعی توکن (دیکد شده) رو برمیگردونه، در غیراینصورت متوجه میشیم توکن درست نیست یا به اصطلاح ولید نیست و در جایی که نیاز به اعتبارسنجی هست به کاربر اجازه ادامه کار رو نمیدیم.

آراد ملایری ۱۴ شهریور ۱۴۰۲، ۰۹:۰۶

عذر میخوام چرا موقع ساخت توکن نیومدیم انجوری بگیم

function createApiToken($user): string
{
    $payload = ['user_id' => $user->id];
    $jwt_token = JWT::encode($payload, 'JWT_KEY', 'HS256');
    return $jwt_token;
}

این بوده در واقع که اومدیم پاس دادیم به فانکشن isValidToken


شقایق خرم‌آبادی ۱۴ شهریور ۱۴۰۲، ۰۹:۲۳

توی تابع اسم متغییر رو بزاریم و بعد ریترن کنیم یا مستقیم از خروجی JWT::encode ریترن کنیم خروجیمون یکی هست، برای تمیزتر کردن کدها و اشغال نشدن بیخودی حافظه و اینکه قرار نیست توی تابع createApiToken کار دیگه ای با متغیر $jwt_token انجام بدیم، میایم مستقیم ریترن میکنیم.

بهترین پاسخ
آراد ملایری ۱۴ شهریور ۱۴۰۲، ۰۹:۳۰

مرسی آقای برزگر بزگوار که وقت گذاشتید ممنون بابت توضیحی که دادید

شقایق خرم‌آبادی ۱۴ شهریور ۱۴۰۲، ۱۶:۴۰

0000000000000000000000000

بهناز شریف ۱۴ شهریور ۱۴۰۲، ۱۷:۲۰