احراز هویت کاربر با Laravel Passport

احراز هویت کاربر فرآیندی است که به اپلیکیشن امکان شناسایی هویت کاربر را می‌دهد. با لیداوب همراه باشید تا احراز هویت کاربر با Laravel Passport را فرا بگیرید.


Laravel Passport چیست؟

همه کاربران برای دسترسی به یک اپلیکیشن وب باید به سیستم ورود یا Login کنند. کاربر نام کاربری و کلمه عبور خود را وارد می‌کند. اگر کلمه عبور صحیح باشد کاربر می‌تواند وارد حساب کاربری خود شود. حالا کاری که Laravel Passport انجام می‌دهد چیست؟ API‌ها معمولا از توکن برای احراز هویت کاربر استفاده کرده و وضعیت session را بین درخواست‌ها حفظ نمی‌کند. با استفاده از Laravel Passport احراز هویت کاربر بسیار ساده خواهد شد چون در عرض چند دقیقه پیاده سازی سرور OAuth2 را برای اپلیکیشن لاراول شما انجام می‌دهد. پاسپورت بر روی سرور League OAuth2 ساخته می‌شود که نگهداری آن بر عهده Alex Bilbie می‌باشد.

اگر یک کاربر احراز هویت شود، توکنی که طی فرآیند لاگین ایجاد شده بود ذخیره می‌شود تا دسترسی API به کاربر را تا زمانی که توکن طی خروج کاربر لغو شود، حفظ کند. اکنون می‌خواهیم یک API endpoint به نام Login و API endpoint حفاظت شده به نام Logout برای ورود و خروج کاربران به یک اپلیکیشن لاراول ایجاد کنیم.

API endpoint چیست؟

API endpoint برای تمام کاربران وب موجود است. مثلا Login را در نظر بگیرید که باید برای هر کسی که می‌خواهد وارد یک اپلیکیشن شود، وجود داشته باشد.

API endpoint حفاظت شده چیست؟

API endpoint تنها برای کاربران احراز هویت شده موجود خواهد بود. مثلا Logout را در نظر بگیرید. فقط یک کاربر معتبر می‌تواند از حساب کاربری Logout کند.

راه اندازی اپلیکیشن لاراول

قبل از نصب لاراول مطمئن شوید که Apache را همراه با MySql و PHP V7.2، نصب و اجرا کرده‌اید. ما نیاز به Composer جهت نصب لاراول در سیستم خود داریم. Composer ابزاری برای مدیریت پکیج‌‌ها در لاراول و PHP است. این ابزار به شما اجازه اعلان کتابخانه‌هایی که پروژه شما به آن وابسته هست را می‌دهد و آن‌ها را برای شما مدیریت (نصب و به روز رسانی) می‌کند. Composer می‌تواند به صورت گلوبال یا لوکال نصب شود که به شرایط پروژه شما بستگی دارد. ما می‌خواهیم آن را به صورت لوکال نصب کنیم. یک دایرکتوری مناسب باز کرده و دستور زیر را در ترمینال خود اجرا کنید:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php

php -r "unlink('composer-setup.php');"

این دستور یک فایل composer.phar در دایرکتوری مورد نظر شما ایجاد می‌کند. حالا با استفاده از دستور زیر، اپلیکیشن لاراول خود را نصب می‌کنیم:

php composer.phar create-project --prefer-dist laravel/laravel laravel-passport

پس از نصب، یک دیتابیس ایجاد کرده و نام آن را passport بگذارید. سپس، اپلیکیشن را در ویرایشگر مورد نظر خود باز کنید. ما در اینجا از Code استفاده می‌کنیم. اگر Composer را به صورت لوکال نصب کرده‌اید، فراموش نکنید که دوباره آن را در پروژه خود نصب کنید.

کانفیگ محیط

گاهی استفاده از مقادیر مختلف کانفیگ براساس محیطی که اپلیکیشن در آن اجرا می‌شود، می‌تواند مفید باشد. مثلا، شاید بخواهید از یک درایور cache متفاوت از آنچه که روی سرور تولید خود نصب کرده‌اید به صورت لوکال نصب کنید. برای انجام این کار، لاراول از DotEnv PHP library استفاده می‌کند. در نصب جدید لاراول، دایرکتوری ریشه اپلیکیشن شما شامل فایل .env.example خواهد بود. اگر شما لاراول را از طریق Composer نصب کرده باشید، این فایل به صورت خودکار به.env تغییر نام خواهد داد. در غیر این صورت، باید به صورت دستی نام آن را تغییر دهید.

حالا فایل .env را باز کرده و دستور زیر را به روز رسانی کنید:

APP_URL=https://localhost -> APP_URL=https://localhost/laravel-passport/public

DB_DATABASE=homestead -> DB_DATABASE=your database name here i.e passport

DB_USERNAME=homestead -> DB_USERNAME=your db username

DB_PASSWORD=secret -> DB_PASSWORD=your db password

نصب Passport

برای شروع کار، Passport را با استفاده از مدیریت پکیج Composer نصب کنید:

php composer.phar require laravel/passport

پس از نصب موفقیت آمیز پکیج Passport در اپلیکیشن خود، باید Service Provider را راه اندازی کرد. بنابراین، فایل config/app.php را باز کرده و provider زیر را به آن اضافه کنید:

احراز هویت کاربر با Laravel Passport

حالا که سرویس دهنده Passport دایرکتوری مایگریشن دیتابیس خود را درون فریم ورک ثبت کرد، بنابراین، باید پس از ثبت provider، دیتابیس خود را منتقل کنید. مایگریشن Passport جداول مورد نیاز اپلیکیشن برای ذخیره کردن کاربران و دسترسی به توکن‌ها، ایجاد خواهد کرد.

مایگریشن دیتابیس

مایگریشن‌ها نقش version control را برای دیتابیس دارند و به شما اجازه می‌دهند تا طرح دیتابیس اپلیکیشن را اصلاح و به اشتراک گذاری کنید. مایگریشن‌های معمولا با schema builder لاراول جفت می‌شوند تا طرح دیتابیس اپلیکیشن شما را ایجاد کنند. لاراول دارای مایگریشن پیش‌فرض user table است. بنابراین، ما نیازی نداریم هیچ مایگریشنی برای این اپلیکیشن بنویسیم چون برای احراز هویت فقط از ایمیل و پسورد استفاده خواهیم کرد. برای migrate جدول users و دیگر جداول Passport، دستور آرتیسان زیر را اجرا کنید:

php artisan migrate

احراز هویت کاربر با Laravel Passport

سپس، باید دستور passport: install را اجرا کنید. این دستور کلیدهای رمزگذاری لازم برای تولید توکن‌های دسترسی امن را ایجاد می‌کند. علاوه بر این، این دستور کلاینت‌های personal access (دسترسی شخص) و password grant (تایید پسورد) را ایجاد خواهد کرد که برای تولید توکن‌های دسترسی به کار می‌روند:

php artisan passport:install

پس از اجرای این دستور، Laravel\passport\HasApiTokens را به مدل App\User(Location – app\user.php) اضافه کنید. این ویژگی چند متد helper برای مدل شما ایجاد می‌کند که با استفاده از آن می‌توانید توکن احراز هویت کاربر و حوزه‌های دسترسی را بررسی کنید:

احراز هویت کاربر با Laravel Passport

سپس، باید متد passport: :router را در متد boot از AuthServiceProvider(Location - app\Providers\AuthServiceProvider.php) خود فراخوانی کنید. این متد route‌های لازم برای صدور توکن‌های دسترسی، لغو توکن‌های دسترسی، کلاینت‌ها و توکن‌های دسترسی شخصی را ثبت می‌کند:

احراز هویت کاربر با Laravel Passport

در نهایت، در فایل کانفیگ config/auth.php باید گزینه driver از گارد احراز هویت api برای passport ایجاد کنید. این روش به اپلیکیشن شما دستور می‌دهد تا در زمان احراز هویت درخواست‌های API ورودی از TokenGuard استفاده کنید:

احراز هویت کاربر با Laravel Passport

نوشتن کنترلر برای عملیات login و logout

دستور php artisan make:controller AuthenticationController را اجرا کنید. این دستور یک فایل AuthenticationController.php در app\Http\Controllers ایجاد می‌کند.

Login

منطق اصلی login در واقع یافتن و بازیابی رکورد با کمک مقدار email است که با یک درخواست می‌آید. پس از بازیابی، اگر پسوردی که در درخواست آمده است با پسورد بازیابی شده منطبق باشد، یک توکن ایجاد کرده و آن را به صورت یک پاسخ با کد وضعیت 200 ارسال می‌کنیم. اگر منطبق نباشد، پیغام خطای مناسب را با کد وضعیت 442 ارسال می‌کنیم. اگر هیچ کاربری با ایمیل درخواستی یافت نشود، همین پروسه سناریوی پسورد اشتباه دنبال خواهد شد:

احراز هویت کاربر با Laravel Passport

Logout

منطق عمل logout بازیابی توکن از عنوان درخواست است. در این صورت، توکن را باطل می‌کنیم:

احراز هویت کاربر با Laravel Passport

کنترلر نهایی ما به این صورت خواهد بود:

احراز هویت کاربر با Laravel Passport

Route

تمام routeهای لاراول در فایل‌های route تعریف می‌شوند که در دایرکتوری route قرار گرفته است. ما از api.php برای تعریف API route استفاده می‌کنیم. دو route به نام‌های login و logout ایجاد می‌کنیم. به یاد داشته باشید که login یک route عمومی و logout یک route خصوصی است. فایل route به این شکل خواهد بود:

احراز هویت کاربر با Laravel Passport

تست API با استفاده از Postman

Postman پلتفرمی است که از ایجاد API پشتیبانی کرده و آن را ارتقا می‌دهد. پیش از تست، یک رکورد به جدول users خود اضافه کنید تا API خود را تست کنیم. همچنین، مطمئن شوید که storage و دایرکتوری bootstrap/cache اپلیکیشن، قابل نوشتن باشد.

تست Login

POST https://localhost/laravel-passport/public/api/login

احراز هویت کاربر با Laravel Passport

تست Logout

GET https://localhost/laravel-passport/public/api/logout

حالا توکن را کپی کرده و آن را به عنوان هدر قرار دهید:

احراز هویت کاربر با Laravel Passport

مطالعه مقالات مرتبط در لیداوب:

امیدوارم بتوانید از این مقاله کاربردی در ساخت وب سایت‌های خود با لاراول بهره ببرید. با سایر مقالات ما در زمینه‌های لاراول و طراحی وب در کتابخانه‌ آنلاین لیداوب همراه باشید. همچنین، می‌توانید نظرات و پیشنهادات خود را در بخش دیدگاه‌های سایت با ما در میان بگذارید.