روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۹ دانشجوی سون‌لرن
مشکل دریافت خطای jwt در postman
جامعه پی اچ پی ایجاد شده در ۰۶ فروردین ۱۴۰۱

سلام

من این قسمت از آموزش رو تا دقیقه ۱۱ پیش اومدم

در اینجا استاد در postman یه درخواست GET میفرسته به آدرس پروژه همراه به توکن. بعد پاسخ رو دریافت میکنه. ولی من وقتی انجام میدم خطار زیر رو میده


<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )span> Warning: foreach() argument must be of type array|object, string given in /private/var/www/github/php-api/iran/vendor/firebase/php-jwt/src/JWT.php on line <i>422i>th>tr> <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stackth>tr> <tr><th align='center' bgcolor='#eeeeec'>#th><th align='left' bgcolor='#eeeeec'>Timeth><th align='left' bgcolor='#eeeeec'>Memoryth><th align='left' bgcolor='#eeeeec'>Functionth><th align='left' bgcolor='#eeeeec'>Locationth>tr> <tr><td bgcolor='#eeeeec' align='center'>1td><td bgcolor='#eeeeec' align='center'>0.0004td><td bgcolor='#eeeeec' align='right'>366248td><td bgcolor='#eeeeec'>{main }( )td><td title='/private/var/www/github/php-api/iran/api/v1/cities/index.php' bgcolor='#eeeeec'>.../index.php<b>:b>0td>tr> <tr><td bgcolor='#eeeeec' align='center'>2td><td bgcolor='#eeeeec' align='center'>0.0011td><td bgcolor='#eeeeec' align='right'>417544td><td bgcolor='#eeeeec'>isValidToken( <span>$jwt_token = span><span>'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxfQ.8mRbcFsYf6MDSr3SQcF1jXuPw7v8gCXX_Iht2JZbPjQ'span> )td><td title='/private/var/www/github/php-api/iran/api/v1/cities/index.php' bgcolor='#eeeeec'>.../index.php<b>:b>11td>tr> <tr><td bgcolor='#eeeeec' align='center'>3td><td bgcolor='#eeeeec' align='center'>0.0012td><td bgcolor='#eeeeec' align='right'>418240td><td bgcolor='#eeeeec'>Firebase\\JWT\\JWT: :decode( <span>$jwt = span><span>'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxfQ.8mRbcFsYf6MDSr3SQcF1jXuPw7v8gCXX_Iht2JZbPjQ'span>, <span>$keyOrKeyArray = span><span>'IranProjectKey_HVggSfNJX+wZQd=%%_##PF^W6G#Hym'span>, <span>[ 0 => 'HS256' ]span> )td><td title='/private/var/www/github/php-api/iran/App/iran.php' bgcolor='#eeeeec'>.../iran.php<b>:b>165td>tr> <tr><td bgcolor='#eeeeec' align='center'>4td><td bgcolor='#eeeeec' align='center'>0.0012td><td bgcolor='#eeeeec' align='right'>420040td><td bgcolor='#eeeeec'>Firebase\\JWT\\JWT: :getKey( <span>$keyOrKeyArray = span><span>'IranProjectKey_HVggSfNJX+wZQd=%%_##PF^W6G#Hym'span>, <span>$kid = span><span>NULLspan> )td><td title='/private/var/www/github/php-api/iran/vendor/firebase/php-jwt/src/JWT.php' bgcolor='#eeeeec'>.../JWT.php<b>:b>125td>tr> table>font> { "http_status": 404, "http_message": "Not Found", "data": false }

سلام دوست عزیز

خطای این بخش رو بررسی کردین؟

Warning: foreach() argument must be of type array|object, string given in /private/var/www/github/php-api/iran/vendor/firebase/php-jwt/src/JWT.php on line 
محمد گازری ۰۶ فروردین ۱۴۰۱، ۰۹:۴۴

فایل JWT.php مربوط به وندور هست و نباید تغییری کنه

خطا از اینجا میاد:

function isValidToken($jwt_token)
{
    try {
        $payload = JWT::decode($jwt_token, JWT_KEY, array(JWT_ALG));
        return $payload;
    } catch (Exception $e) {
        return false;
    }
}

ولی کد رو دقیقا مثل کد‌های استاد نوشتم!

سیدرضا بازیار ۰۶ فروردین ۱۴۰۱، ۰۹:۴۹

کدتون رو در گیت پوش کنید براتون بررسی میکنم

محمد گازری ۰۶ فروردین ۱۴۰۱، ۰۹:۵۶

سلام دوست عزیز

ببخشید من دیر رسیدم پروژتون رو بررسی کنم

ببینید مشکلی از پروژه شما نیست، استاد در این ویدیو دارن از ورژن 5.2 پکیج firebase/php-jwt استفاده میکنن که این پکیج از ورژن 6 مشکل Backwards Compatibility داره برای همین پروژه شما با روش استاد از کار افتاده

2 تا راه دارید

1.از ورژن 5.2 استفاده کنید که پیشنهاد نمیشه

2.با توجه به دایکومنت پکیج به شکل زیر باید عمل کنید

در فایل iran.php این کلاس رو use کنید

use \\Firebase\\JWT\\Key;

بعد به جای خط زیر

$payload = JWT::decode($jwt_token, JWT_KEY, array(JWT_ALG));

خط زیر رو قرار بدین

$payload = JWT::decode($jwt_token, new Key(JWT_KEY, JWT_ALG));

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

مستندات این مورد در لینک زیر

https://github.com/firebase/php-jwt/releases/tag/v6.0.0

اگر باز سوالی بود در همین تاپیک مطرح کنید!

محمد گازری ۰۶ فروردین ۱۴۰۱، ۱۷:۳۸

با تغییر این کد، ارور برطرف شد. ولی حالا وقتی jwt رو توی postman میزارم و میفرستم پیام زیر رو میاره: (چه درست بزارم و چه اشتباه، باز هم این پیام میاد)

Key not found!

سیدرضا بازیار ۰۶ فروردین ۱۴۰۱، ۱۸:۰۰

این کلاس رو use کردین؟

use \\Firebase\\JWT\\Key;
محمد گازری ۰۶ فروردین ۱۴۰۱، ۱۸:۱۵

اره. در فایل iran.php اول این کد use شده

سیدرضا بازیار ۰۶ فروردین ۱۴۰۱، ۱۸:۱۶

نباید جایگزین کنید

به شکل زیر صحیح

use \\Firebase\\JWT\\JWT;
use \\Firebase\\JWT\\Key;
بهترین پاسخ
محمد گازری ۰۶ فروردین ۱۴۰۱، ۱۸:۲۰

این دوتا رو توی iran.php با هم use کردم مشکل حل شد

use \\Firebase\\JWT\\JWT;
use \\Firebase\\JWT\\Key;
سیدرضا بازیار ۰۶ فروردین ۱۴۰۱، ۱۸:۲۱