آموزش استفاده از Passport لاراول برای اعتبارسنجی API

تبلیغات
کانال تلگرام فتولیا

فریم ورک Laravel متدهایی اعتبارسنجی (authentications) زیادی مثل Session, File, Token را برای مدیریت Login و Logout معمول کاربران پشتیبانی می کند ولی وقتی برنامه شما با درخواستی خارجی مثلا از طرف یک اپلیکیشن موبایل طرف است و روش لاگین معمولی پاسخگو نیست چه باید کرد؟

خوشبختانه لاراول از نسخه ۵.۳ به بعد ابزار Passport را (از OAuth2 پشتیبانی می کند) در اختیار ما گذاشت که بوسیله آن می توانیم درخواست های خارجی مثلا درخواست یک اپلیکیشن موبایل از برنامه مان را اعتبارسنجی کنیم و بتوانیم به آن اپلیکیشن پاسخ دهیم و مثلا لیست اطلاعات کاربر را به آن بفرستیم.

سوالی که خیلی از توسعه دهندگان لاراول می پرسند اینه که : خوب لاراول Passport ابزار خیلی خوبی برای اعتبارسنجی درخواست های ثانویه ارسالی به برنامه ماست ! ولی چطور اون رو پیاده سازی و استفاده کنیم ؟”

در این مقاله می خواهیم با یک مثال ساده نحوه کار با پاسپورت رو ببینیم .در این مثال ما فرض می کنیم شما می خواهید یک اپلیکیشن موبایل رو (آندروید یا iOS فرقی نمی کنه) به برنامه لاراول از طریق API وصل کنید . در این API کارهای زیر رو انجام خواهیم داد:

  • ورود کاربر : نام کاربری و رمز عبور کاربر در اپلیکیشن دریافت میشه و به لاراول ارسال میشه .لاراول اطلاعات رو اعتبارسنجی می کنه و اگر درست باشند ، یک Token ایجاد می کنه در برمی گردونه به اپلیکیشن والا خطای عدم دسترسی میده
  • ثبت نام کاربر : اطلاعات مورد نیاز در اپلیکیشن موبایل دریافت میشه و به لاراول ارسال میشه.لاراول کاربر رو به دیتابیس اضافه میکنه و Token دسترسی اون کاربر رو بر می گردونه.
  • دریافت اطلاعات کاربر وارد شده : بعد از انجام یکی از دو کار بالا(ورود یا ثبت نام) کاربر حالا وارد اپلیکیشن موبایل شده پس می تونه مثلا اطلاعات خودش رو ببینه . این کار باز از طریق ارسال یک درخواست به API و دریافت اطلاعات کاربر و نمایش اون در اپلیکیشن انجام میشه.

دقت کنید که اعتبارسنجی در API با Login معمولی که یک فرم ورود می بینیم متفاوت هست.در API معمولا بعد از اینکه صحت نام کاربری و پسورد کاربر مشخص شد ، یک نشانه ورود بنام Token برای اون کاربر ایجاد میشه و این توکن به اپلیکیشن (ارسال کننده درخواست یا Client) ارسال میشه. از این به بعد این توکن به بین API (لاراول) و کلاینت (اپلیکیشن) دست به دست میشه و اعتبارسنجی درخواست از طریق این توکن انجام میشه و مثل لاگین معمولی خبری از session نیست.

نصب و تنظیم Passport

برای شروع باید Laravel Passport رو نصب کنیم. نصب هم طبق معمول از طریق Composer انجام میشه.پس خط فرمان رو باز کنید و دستور زیر رو وارد کنید تا بسته های مربوطه دانلود و نصب بشن.

حالا باید بسته را در بخش “Providers” فایل config/app.php ثبت کنیم :

پاسپورت به جدول هایی نیاز دارد تا اطلاعاتش را در آن ذخیره کند.برای اینکه این جداول در دیتابیس ایجاد شوند باید دستور زیر را در خطر فرمان وارد کنید:

در همین رابطه :   نوشتن کوئری left join در فریم ورک لاراول 5

بعد از اینکه جداول فوق ایجاد شدند نوبت به آخرین دستور می رسد تا نصب پاسپورت تمام شود:

دستور فوق سرویس Passport را در لاراول نصب می کند و نیز کلیدهای رمزنگاری را ایجاد می کند تا پاسپورت بتواند Token های امنی را ایجاد کند.

حالا باید تریت “HasApiTokens” را به model کاربر اضافه کنید.فایل app/User.php رو باز کنید و در بالا این کد رو اضافه کنید:

و این کد را داخل کلاس وارد کنید:

حالا شکل کلی کلاس User شبیه این خواهد بود:

حالا فایل “app\Providers\AuthServiceProvider.php” رو باز کنید و خط زیر رو بالای صفحه اضافه کنید:

و خط زیر رو داخل متد boot وارد کنید:

کد فوق route هایی که برای اعتبارسنجی Passport نیاز است را ایجاد می کند.

و حالا فایل “config/auth.php” رو باز کنید و در بخش api ، گزینه provider رو از token به passport تغییر بدید:

تبریک !!! تنظیمات passport به تمام رسید .

اضافه کردن Route های API

برای ۳ کاری که در اول مطلب عرض شد باید مسیرها یا همان روت هایی را در فایل “routes\api.php” لاراول تعریف کنیم که به این صورت خواهند بود:

ایجاد Controller برای انجام کارها

همانطور که می بینید روت های فوق به کنترلر UserController اشاره می کنند . پس باید این کنترلر را نیز ایجاد کنیم . برای این کار دستور زیر را در خط فرمان وارد کنید:

در همین رابطه :   لاراول 5.4 : رفع مشکل Specified key was too long error

حالا به مسیر “app\Http\Controllers\API\UserController.php” رفته و کد های زیر را داخل آن وارد کنید:

بروزرسانی جدول Users

به علاوه نیاز است در Migration جدول users نیز تغییراتی بدهید و فیلد api_token رو اضافه کنید.

در همین رابطه :   افزایش سرعت Laravel با cache تنظیمات

تست API

همانطور که می بینید این کنترلر شامل ۳ متد برای انجام ۳ کاری است که در بالا ذکر کردیم.برای تست کارکرد API می توانید از برنامه PostMan استفاده کنید و درخواست های مورد نظرتان را به آدرس API ارسال کنید.مثلا برای تست login به شکل زیر می توانید عمل کنید:

هنگام تماس با api دقت کنید که “Accept : application/json” را نیز همراه Header درخواست ارسال کنید تا لاراول به جای نمایش HTML به شما خروجی JSON ارائه دهد دقیقا همان چیزی که اپلیکیشن موبایل به آن نیاز دارد.

بعد از اجرای موفقیت آمیز شما مثل تصویر بالا خروجی شامل یک Token طولانی خواهید دید.کافیست این توکن را کپی کنید چون برای اجرای درخواست بعدی یعنی گرفتن اطلاعات کاربر به آن نیاز داریم.

در تصویر بالا مثل بخش قبل به api متصل شدی مولی برای گرفتن اطلاعات کاربر لاگین کرده . به بخش headers نیز توجه کنید که ۲ مورد Accept و Authorization حتما نیاز است.توکنی که در بخش قبل بعد از لاگین کپی کرده بودیم باید در بخش Authorization و بعد از کلمه “Bearer” کپی کنیم .

برای برنامه و api خودتون می تونید کنترلرها و روت های دیگه ای هم اضافه کنید و به همین صورتی که دیدید استفاده کنید.

همین ! ایجاد api در لاراول و اضافه کردن لاگین به آن در لاراول خیلی ساده بود و امیدوارم بتونید استفاده کنید و مفید باشه .

 

2 Comments

  1. سلام
    وقتی به روت details درخواست میفرستم این خطا را می دهد؟
    SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘api_token’ in ‘where clause’ (SQL: select * from users where api_token = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjQ3MWJhNDU4YWNjY2RlNTU4ZTRlYmUwY2U3OTFjMmMzNDhiMDhjZjAxOTYxMGRkZWEyNTk4ZGU2NTBiYzJlYTM5NzZmZWVmMDgyZjlhODdhIn0 limit 1)

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

More in Laravel
افزایش سرعت Laravel با cache تنظیمات

برای توسعه دهندگان وب افزایش سرعت سایت یکی از چالش های مهم است . یکی از راه هایی که برای...

Close