🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۹ Hossein S
سوال در مورد متغییر $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;
    }
}


Hossein S ۱۳ شهریور ۱۴۰۲، ۱۳:۴۵
$token = getBearerToken();
$user = isValidToken($token);
if(!$user)
  Response::respondAndDie(['Invalid Token!'],Response::HTTP_UNAUTHORIZED);
Hossein S ۱۳ شهریور ۱۴۰۲، ۱۳:۴۷

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

صادق برزگر ۱۳ شهریور ۱۴۰۲، ۱۴:۵۱
$jwt_token

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

Hossein S ۱۳ شهریور ۱۴۰۲، ۱۷:۴۶

حسین جان، متغییری که میگین توی تابع 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


Hossein S ۱۴ شهریور ۱۴۰۲، ۰۹:۲۳

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

بهترین پاسخ
صادق برزگر ۱۴ شهریور ۱۴۰۲، ۰۹:۳۰

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

Hossein S ۱۴ شهریور ۱۴۰۲، ۱۶:۴۰

0000000000000000000000000

وحید صالحی ۱۴ شهریور ۱۴۰۲، ۱۷:۲۰