لینکهای مفید برای شرکت در مسابقه:
در زمان مسابقه میتوانید سوالهای خود را از قسمت "سوال بپرسید" مطرح کنید.
برای انجام عملیات Authentication
روشهای متعددی وجود دارد. همچنین برای یادآوری و جلوگیری از تکرار این عملیات مکانیزمهای مختلفی طراحی شده است. در سالهای گذشته (و همچنین در حال حاضر) یکی از روشهای متداول برای به خاطرسپاری عملیات تشخیص هویت استفاده از Cookie
ها بوده است.
اما با طراحی استاندارد RFC 7519
و پیاده سازی آن در زبانهای مختلف، این روش محبوبیت و کاربرد زیادی پیدا کرده است.
در این سوال از شما میخواهیم که یک روال اعتبارسنجی کامل با این روش را پیاده سازی نمایید.
jwt.php
نوشته خواهد شد. users.json
حاوی یک آرایه از دادههای آزمایشی برای کاربران می باشد که برای انجام عملیات Authentication
از محتوای این فایل باید استفاده کنید.برای تست و اجرای پروژه بهتر است با اجرای دستور php -S 127.0.0.1:5555 -t ./
در پوشه برنامه از سرور builtin
استفاده کنید (پورت و آدرس قابل تغییر است).
تابع checkLogin
را به صورتی تکمیل کنید که با ارسال پارامترهای username
و password
از طریق متد POST
، این دو پارامتر با اطلاعات موجود در فایل users.json
تطبیق داده شده و در صورتی که اطلاعات صحیح باشد خروجی زیر با فرمت JSON چاپ شود:
و در صورتیکه پارامترهای وارد شده با هیچ یک از اطلاعات موجود در فایل مطابقت نداشته باشد خروجی زیر چاپ شود:
واضح است که به جای عبارت
JWT_TOKEN
باید توکن معتبر و صحیح جایگذاری شود.
در نظر داشته باشید که JWT token
تولید شده دارای زمان بوده و پس از گذشت مدت زمان معینی که بر اساس واحد زمان ثانیه، در ثابت TOKEN_LIFETIME
در بالای فایل jwt.php
ذکر شده است بایستی منقضی شود. لازم به ذکر است که این خط را از بالای فایل نباید حذف کنید و نام ثابت را هم نباید تغییر دهید (شما می توانید عدد زمان را تغییر دهید، این عدد در زمان ارزیابی پاسخ هم تغییر خواهد کرد).
با فراخوانی تابع getData
باید حالتهای زیر در نظر گرفته شود :
token
اعتبار سنجی در header
درخواست وجود نداشته باشد یا طول آن 0
باشد پاسخ اسکریپت 403 Forbidden
بوده و body
باید تهی باشد. یعنی هیچ متن یا کاراکتری در خروجی نداشته باشیم و فقط این موضوع از طریق header
به کلاینت اطلاع داده می شود.token
نا معتبری به سمت اسکریپت ارسال شود بایستی header
به صورت 401 Unauthorized
بوده و در body
عبارت INVALID_TOKEN
به عنوان خروجی نمایش داده شود.token
منقضی شدهای به سمت اسکریپت ارسال شود بایستی header
به صورت 401 Unauthorized
بوده و در body
عبارت EXPIRED_TOKEN
به عنوان خروجی نمایش داده شود.token
صحیحی به سمت اسکریپت ارسال شود بایستی المان keys
مربوط به کاربر صاحب token
به صورت json encoded
در خروجی چاپ شود (نیازی به تغییر header
پاسخ نیست).توجه داشته باشید که در موارد بالا HTTP Response Code
وHTTP Response Verb
بررسی خواهد شد.
برای پاسخ به این سوال می تواند از پکیج های composer
هم استفاده کنید (هرچند که الزامی نیست و بدون نیاز به پکیج ها هم سوال قابل حل است) اما در صورت تمایل فایل composer.json
را همراه با فایل jwt.php
فشرده کنید و به عنوان جواب ارسال کنید.
فایل پاسخ خود را با نام jwt.php
ذخیره کرده و به صورت فایل ZIP آپلود کنید.