سیستم احراز هویت
منظور از سیستم احراز هویت چیست؟ سیستم احراز هویت در واقع به مجموعه اعمال، متدها و دستوراتی گفته میشود که از طریق آن، میتوان قابلیت ورود و خروج کابران، ثبت نام، عضویت و لغو عضویت اعضای پروژه را پیاده سازی کرد. به طور کلی به هرگونه عضویت کاربران، ورود و خروج اعضا، ثبت نام و یا لغو عضویت، بازیابی رمز عبور و سطح دسترسیهای کاربران، احراز هویت کاربر یا Authentication و اجازه دسترسی گفته میشود.
طراحی بدون نقص این سیستم، همواره یکی از چالشهای مهم و پیچیده برای برنامه نویسان بوده و است. در ادامه به توضیح کامل احراز هویت یا تصدیق هویت کاربران در لاراول خواهیم پرداخت.
سیستم احراز هویت در لاراول
لاراول به صورت پیش فرض از جدول users برای احراز هویت یا تصدیق هویت کاربر استفاده میکند. راه اندازی سیستم authentication در لاراول ۶ و نسخههای قبل از آن متفاوت است. برای فراگیری کامل این سیستم، لازم است اجرای آن را در هر دو نسخه لاراول ۶ و لاراول ۵.۸ بررسی کنیم.
ساخت پروژه لاراول با نسخه دلخواه ۵.۸
برای ساخت پروژه با لاراول ۵.۸ باید دستور زیر را در خط فرمان وارد کنیم. لطفا به انتخاب ورژن لاراول در انتهای دستور توجه فرمایید:
composer create-project --prefer-dist laravel/laravel blog "5.8.*"
با این دستور، پروژه لاراول تحت عنوان blog با نسخه ۵.۸.۳۵ ساخته خواهد شد که آخرین بروزرسانی نسخه ۵.۸ میباشد.
معرفی پایگاه داده در لاراول
بعد از نصب کامل، database یا پایگاه داده خود را هم از طریق فایل env. به پروژه معرفی نمایید. مثلا:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD=
اجزای پیش فرض پروژه لاراول بعد از نصب
بعد از اتمام نصب پروژه، توجه شما را به موارد زیر جلب میکنم:
- اگر دایرکتوری database > migrations را نگاه کنید، خواهید دید دو migration با نام های users و password_resets بوسیله خود لاراول ایجاد شده است. که اولی مایگریشن جدول users است و دومی مربوط به reset کردن رمز عبور.
- اگر فایل routes > web.php را باز کنید خواهید دید تنها مسیر یا route ای که پیشفرض تعریف شده است، مسیر صفحه اصلی پروژه میباشد.
- و اگر در دایرکتوری resources > views دقت کنید تنها فایل welcome را خواهید یافت.
راه اندازی سیستم احراز هویت در لاراول ۵.۸
برای راه اندازی احراز هویت در نسخه ۵.۸ کافیست در دو مرحله دو دستور وارد کنید:
مرحله اول: دستور زیر را در ترمینال Terminal یا همان Artisan وارد کنید:
php artisan make:auth
تغییرات بعد از این دستور:
- routeهای زیر در فایل web.php اضافه شدهاند که همان روتهای احراز هویت لاراول هستند:
Auth::routes(); Route::get('/home', 'HomeController@index')->name('home');
۲. دایرکتوری layouts و فایل home.blade.php به فولدر resources > views افزوده شدهاند.
مرحله دوم: کافیست برای نهایی کردن سیستم احراز هویت در لاراول ۵.۸ ، دستور زیر را وارد کنید:
php artisan migrate
با این دستور جدول users در دیتابیس شما تشکیل خواهد شد. در ادامه نحوه استفاده از این سیستم را توضیح خواهیم داد.
ساخت پروژه لاراول با نسخه ۶
با اجرای دستور زیر در خط فرمان، لاراول با نسخه ۶ که درواقع نسخهی default این دستور در تاریخ نگارش این مقاله است، نصب خواهد شد:
composer create-project –-prefer-dist laravel/laravel blog
معرفی پایگاه داده در لاراول
بعد از نصب کامل لاراول ۶، database یا پایگاه داده خود را هم از طریق فایل env. به پروژه معرفی نمایید. مثلا:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD=
اجزای پیش فرض پروژه لاراول بعد از نصب
بعد از اتمام نصب پروژه، توجه شما را به موارد زیر جلب میکنم:
- اگر دایرکتوری database > migrations را نگاه کنید، خواهید دید سه migration با نامهای users و password_resets و failed_jobs بوسیله خود لاراول ایجاد شده است. که اولی مایگریشن جدول users است.
- اگر فایل routes > web.php را باز کنید خواهی دید تنها مسیر یا routeای که پیشفرض تعریف شده است، مسیر صفحه اصلی پروژه میباشد.
- و اگر در دایرکتوری resources > views دقت کنید تنها فایل welcome.blade.php را خواهید یافت.
راه اندازی سیستم احراز هویت در لاراول ۶
برای راه اندازی تصدیق هویت کاربر در لاراول ۶ مراحل زیر را دنبال خواهیم کرد:
مرحله اول:
در لاراول ۶ سیستم احراز هویت یا تصدیق کابر به صورت یک پکیج در composer تهیه شده است و اولین کار دانلود این پکیج است. برای دانلود پکیج، دستور زیر را در ترمینال Terminal وارد میکنیم:
composer require laravel/ui --dev
مرحله دوم:
پس از دانلود پکیج احراز هویت لاراول ۶، نوبت به نصب آن در پروژهمان میرسد که با دستور زیر قابل اجراست:
php artisan ui vue –auth
پس از اجرای دستور، سیستم احراز هویت لاراول یا همان تصدیق هویت کاربر به آسانی نصب میشود.
تغییرات بعد از این دستور:
- routeهای زیر در فایل web.php اضافه شدهاند که همان روتهای احراز هویت لاراول هستند :
Auth::routes(); Route::get('/home', 'HomeController@index')->name('home');
۲. دایرکتوری layouts و فایل home.blade.php به فولدر resources > views افزوده شدهاند.
مرحله سوم:
برای نهایی کردن سیستم تصدیق هویت در لاراول ۶ دستور زیر را وارد میکنیم:
php artisan migrate
با این دستور جدول users در دیتابیس شما تشکیل خواهد شد. در ادامه نحوه استفاده از این سیستم را توضیح خواهیم داد.
نحوه استفاده از سیستم احراز هویت در لاراول
اگر چنانچه در Terminal دستور زیر را تایپ کنید، همه route های پروژه مخصوصا آنهایی که تازه ایجاد شدهاند را با نامها و URL شان مشاهده خواهید کرد:
php artisan route:list
لیست همه routeها در جدولی به نمایش گذاشتهاند که در زیر به بررسی آنها و نحوه استفاده از آنها میپردازیم:
register
در جدول routeها ،دو روت به نام register اما با متدهای متفاوت به چشم میخورد. register در فارسی به معنای ثبت نام است. شما اگر در مرورگر عبارت http://127.0.0.1:8000/register را تایپ کنید در واقع به روت register اما با متد GET یا HEAD خواهد رفت. وظیفه این route هدایت شما به صفحه ثبت نام کاربری است. این صفحه با نام register.blade.php در آدرس resources>views>auth موجود است.
(اگر صفحه ثبت نام مرتب و زیبا نبود نترسید، باید npm را نصب کنید: npm install و سپس npm run dev).
هر چند در صفحه welcome دکمههای login و register در header موجود است اما در سراسر پروژه میتوانیم از این route به دو صورت در فایلهای view استفاده کرده و دکمه ورود طراحی کنیم:
<a href="{{ route('register') }}">ثبت نام </a>
یا :
<a href="/register">ثبت نام </a>
پس از پر کردن فرم، و فشردن دکمه register روت register اما این بار با متد POST اجرا شده و مشخصات شما یا هر کاربری که ثبت نام کرده در جدول users ثبت خواهد شد.
اگر در جدول لیست routeها به قسمت action این route دقت کنید میبینید که مقصد یا اکشن این روت، متد یا فانکشن register در کنترلر RegisterController به آدرس زیر است :
app\Http\Controllers\Auth\RegisterController
login
در جدول routeها ،دو روت دبگر نیز به نام login اما با متدهای متفاوت به چشم میخورد. login در فارسی به معنای ورود کاربر است اما کاربری که قبلا ثبت نام یا register کرده. شما اگر در مرورگر عبارت http://127.0.0.1:8000/login را تایپ کنید در واقع به روت login اما با متد GET یا HEAD خواهد رفت. وظیفه این route هدایت شما به صفحه ورود کاربری است. این صفحه با آدرس زیر موجود است:
resources>views>auth>login.blade.php
هر چند در صفحه welcome دکمههای login و register در header موجود است اما در سراسر پروژه میتوانیم از این route به دو صورت در فایلهای view استفاده کرده و دکمه ورود طراحی کنیم:
<a href="{{ route('login') }}">ورود </a>
یا :
<a href="/login"> ورود </a>
پس از پر کردن فرم، و فشردن دکمه Login، روت login ولی این بار با متد POST اجرا و چنانچه مشخصات شما هم صحیح بوده و قبلا ثبت نام کرده باشید، اجازه ورود برای شما داده خواهد شد.
اگر در جدول لیست routeها به قسمت action این route دقت کنید میبینید که مقصد یا اکشن این روت، متد یا فانکشن login در کنترلر LoginController به آدرس زیر است :
app\Http\Controllers\Auth\LoginController
home
در واقع این روت زمانی اجرا خواهد شد که کاربر ثبت نام کند یا وارد شود. به عبارتی این روت بعد از اجرای صحیح route های register و login به صورت پیش فرض یا default اجرا خواهد شد. وظیفه این route هدایت شما به صفحه یا ویوی home.blade.php است که بعد از فعالسازی سیستم احراز هویت اضافه گردیده است. شما میتوانید به جای صفحه home.blade.php صفحه view دیگری انتخاب کنید تا کاربر بعد از تصدیق هویت کاربر، به آن صفحه هدایت یا redirect گردد.
برای این کار باید در کنترلرهای RegisterController و LoginController ، مقدار home/ را در دستور زیر تغییر دهید :
protected $redirectTo = '/home';
مثلا بنویسید :
protected $redirectTo = '/';
تا به صفحه welcome.blade.php هدایت شود. توجه کنید که هر مقداری در این دستور باید از طریق یک route در فایل web.php تعریف شود. مثلا اگر به جای home/ بنویسیم about/ ، باید یک route مثلا بدین صورت تعریف کنیم:
Route::get('/about', function () { return view('about'); });
و در ضمن باید فایل about.blade.php موجود باشد.
logout :
این route با متد POST برای خروج یا Logout استفاده میشود. درواقع این متدی است که اگر کاربر login باشد، کار اجرای خروج کاربر از سیستم را انجام خواهد داد. این route را نمیتوان در آدرس بار مرورگر تایپ و اجرا کرد چون متد این روت از نوع POST میباشد. این route میتواند بدین صورت اجرا شود اما در کنترلرها. مثلا :
Auth::logout();
استفاده از سیستم یا سرویس احراز هویت لاراول در فایل های view یا blade
شما میتوانید، به راحتی با دستورات یا directiveهای blade از سیستم تصدیق هویت کاربر استفاده کنید. در زیر به توضیح برخی از این دایرکتیوها میپردازیم :
-
auth@
با استفاده از این دستور در فایل blade یا همان view، میتوانید کاربر عضو را احراز هویت یا مورد هدف قرار دهید. مثلا اگر در صفحه welcome در جایی دستور زیر را بنویسد :
@auth {{ شما وارد سایت شده اید }} @endauth
چناچه کاربر login شده باشد، عبارت ” شما وارد سایت شدهاید ” را خواهد دید. این directive باید با عبارت @endauth بسته شود. همچنین به مثال زیر دقت کنید :
@auth <p id="newElement">این متن را به کاربران مهمان نمایش نده </p> @else <p id="newElement">این متن را به کاربران مهمان نمایش بده</p> @endauth
-
guest@
با استفاده از این دستور در فایل blade یا همان view، میتوانید کاربر مهمان را احراز هویت یا مورد هدف قرار دهید. مثلا اگر در صفحه welcome در جایی دستور زیر را بنویسد :
@guest {{ شما وارد نشده اید }} @endguest
تنها کاربرانی عبارت “شما وارد نشدهاید” را خواهند دید که login نشدهاند و درواقع مهمان یا guest هستند. این directive باید با عبارت endguest@ بسته شود.
-
()auth()->user
با این دستور میتوان تمام اطلاعات کاربری که login هست را گرفت که در مثال، ما نام کاربر را مورد هدف قرار دادهایم :
@auth {{ auth()->user()->name }} @endauth
این دستور باید داخل {{ }} یا {!! !!}نوشته شود.
-
()Auth::user
با این دستور میتوان تمام اطلاعات کاربری که login هست را گرفت که در مثال، ما نام کاربر را مورد استفاده قرار دادهایم :
@auth {{ Auth::user()->name }} @endauth
این دستور باید داخل {{ }} یا {!! !!}نوشته شود.
-
()auth()->id
با این دستور میتوان id کاربری که login هست را گرفت. مثال:
@auth {{ auth()->id()}} @endauth
این دستور باید داخل {{ }} یا {!! !!}نوشته شود.
-
()Auth::id
با این دستور میتوان id کاربری که login هست را گرفت. مثال:
@auth {{ Auth::id() }} @endauth
این دستور باید داخل {{ }} یا {!! !!}نوشته شود.
استفاده از سیستم احراز هویت لاراول در کنترلر ها و مدل ها
-
()Auth::user
در مثال زیر، برای سرویس احراز هویت کاربر لاگین شده را گرفته و با تمام اطلاعاتش به ویوی profile تزریق میکنیم:
use Illuminate\Support\Facades\Auth; class PageController extends Controller { public function __construct() { $this->middleware('auth'); } public function profile() { $user = Auth::user(); return view('home', compact('user')); } }
حتی میتوان تمام اطلاعات کاربر را دریافت کرد مثلا:
$name = Auth::user()->name;
-
()Auth::id
با دستور زیر هم میتوان id کاربر login شده را گرفت:
use Illuminate\Support\Facades\Auth; class PageController extends Controller { public function __construct() { $this->middleware('auth'); } public function getUserId() { $id = Auth::id(); } }
Middleware یا میدل ویر auth در لاراول
میتوانیم با RouteMiddleware و اعمال میدل ویر auth در هر routeای، تنها به کاربرانی که احراز هویت شدهاند اجازه دسترسی به آن مسیر یا route را بدهیم.
Route::get('profile', function () { return view('profile'); })->middleware('auth');
در مثال بالا تنها کاربرانی که login شده اند به صفحه profile اجازه دسترسی پیدا خواهند کرد.از میدل ویر auth در کنترلرها نیز میتوان استفاده کرد. لازمه این کار ایجاد یک constructor یا متد سازندهدر کنترلر است. به مثال زیر که همان HomeController خود سیستم احراز هویت لاراول است دقت کنید:
class HomeController extends Controller { public function __construct() { $this->middleware('auth'); } public function index() { return view('home'); } }
تنها کاربرانی که وارد یا login شده اند اجازه دسترسی به صفحه home را خواهند داشت. چنانچه متدهای دیگری نیز در این کنترلر ثبت شوند، باز تنها کاربران غیر مهمان اجازه دسترسی به آنها را خواهند داشت.
جمع بندی آموزش احراز هویت در لاراول
در پایان می توان گفت سیستم یا سرویس احراز هویت و یا تصدیق هویت کاربر در لاراول، بسیار آسان و قابل انعطاف بوده و با چند دستور ساده در تمامی نسخههای لاراول، در دسترس است. شما بعد از مشاهده فیلم آموزشی موجود در این جلسه، قادر به پیاده سازی پیشرفته احراز هویت لاراول بوده و یاد خواهید گرفت که چگونه پس از راهاندازی، حتی تغییرات دلخواه خود را در کنترلرها و view های احراز هویت لاراول ۶ و حتی لاراول ۵.۸ انجام داده و از انعطاف پذیری بیش از حد آن استفاده کنید.
می توانید کاری کنید که کاربران بر اساس ایمیل یا نام و یا هر دو ، فرم ورود را پر کنند در حالیکه لاراول بصورت پیش فرص، در فرم ثبت نام با ایمیل login میکند.مشاهده این محصول ویدیویی شما را قادر به دستکاری فرمهای ورود و ثبت نام، متدهای validate، و نمایش خطاهای request دلخواه خواهد کرد. خواهید توانست سیستم تصدیق هویت کاربر در لاراول را به راحتی و شیرینی آموخته و در همه پروژههای تان استفاده نمایید. اطلاعات هر کاربر login شده را گرفته و در هر کجای برنامه نشان خواهید داد.