نسخه:

احراز هویت

معرفی

بسیاری از برنامه های کاربردی وب راهی برای احراز هویت با برنامه و "ورود به سیستم" برای کاربران خود فراهم می کنند. پیاده سازی این ویژگی در برنامه های کاربردی وب می تواند یک تلاش پیچیده و بالقوه خطرناک باشد. به همین دلیل، لاراول در تلاش است تا ابزارهای مورد نیاز برای اجرای سریع، ایمن و آسان احراز هویت را در اختیار شما قرار دهد.

در هسته خود، امکانات احراز هویت لاراول از "نگهبانان" و "ارائه دهندگان" تشکیل شده است. گاردها نحوه احراز هویت کاربران را برای هر درخواست تعریف می کنند. برای مثال، لاراول با session محافظی ارسال می‌شود که با استفاده از ذخیره‌سازی جلسه و کوکی‌ها وضعیت را حفظ می‌کند.

ارائه‌دهندگان نحوه بازیابی کاربران از فضای ذخیره‌سازی دائمی شما را تعریف می‌کنند. لاراول با پشتیبانی از بازیابی کاربران با استفاده از Eloquent و سازنده کوئری پایگاه داده ارائه می شود. با این حال، شما آزاد هستید که ارائه دهندگان اضافی را در صورت نیاز برای برنامه خود تعریف کنید.

فایل پیکربندی احراز هویت برنامه شما در آدرس قرار دارد config/auth.php . این فایل حاوی چندین گزینه مستند برای اصلاح رفتار سرویس های احراز هویت لاراول است.

نگهبانان و تامین کنندگان را نباید با "نقش" و "مجوز" اشتباه گرفت. برای کسب اطلاعات بیشتر درباره مجوز دادن به اقدامات کاربر از طریق مجوزها، لطفاً به مستندات مجوز مراجعه کنید .

کیت های شروع

می خواهید سریع شروع کنید؟ یک کیت شروع برنامه لاراول را در یک برنامه جدید لاراول نصب کنید. پس از انتقال پایگاه داده خود، مرورگر خود را به /register یا هر URL دیگری که به برنامه شما اختصاص داده شده است پیمایش کنید. کیت های استارت از داربست کل سیستم احراز هویت شما مراقبت می کنند!

حتی اگر تصمیم گرفتید از کیت شروع در برنامه نهایی لاراول خود استفاده نکنید، نصب کیت شروع Laravel Breeze می تواند فرصتی فوق العاده برای یادگیری نحوه پیاده سازی تمام قابلیت های احراز هویت لاراول در یک پروژه واقعی لاراول باشد. از آنجایی که Laravel Breeze کنترل‌کننده‌ها، مسیرها و نماهای احراز هویت را برای شما ایجاد می‌کند، می‌توانید کدهای درون این فایل‌ها را بررسی کنید تا نحوه پیاده‌سازی ویژگی‌های احراز هویت لاراول را بیاموزید.

ملاحظات پایگاه داده

به طور پیش فرض، لاراول یک App\Models\User مدل Eloquent را در فهرست شما قرار می دهد app/Models . این مدل ممکن است با درایور پیش فرض احراز هویت Eloquent استفاده شود. اگر برنامه شما از Eloquent استفاده نمی کند، می توانید از database ارائه دهنده احراز هویت استفاده کنید که از سازنده کوئری لاراول استفاده می کند.

هنگام ساخت طرح پایگاه داده برای App\Models\User مدل، مطمئن شوید که طول ستون رمز عبور حداقل 60 کاراکتر باشد. البته، users مهاجرت جدولی که در برنامه های جدید لاراول گنجانده شده است، ستونی را ایجاد می کند که از این طول بیشتر است.

users همچنین، باید بررسی کنید که جدول (یا معادل) شما حاوی یک remember_token ستون رشته ای 100 کاراکتری تهی باشد. این ستون برای ذخیره یک توکن برای کاربرانی که هنگام ورود به برنامه شما گزینه "مرا به خاطر بسپار" را انتخاب می کنند استفاده می شود. مجدداً، users انتقال جدول پیش‌فرض که در برنامه‌های جدید لاراول گنجانده شده است، از قبل حاوی این ستون است.

بررسی اجمالی اکوسیستم

لاراول چندین بسته مرتبط با احراز هویت را ارائه می دهد. قبل از ادامه، اکوسیستم احراز هویت عمومی در لاراول را بررسی می کنیم و هدف مورد نظر هر بسته را مورد بحث قرار می دهیم.

ابتدا نحوه عملکرد احراز هویت را در نظر بگیرید. هنگام استفاده از مرورگر وب، کاربر نام کاربری و رمز عبور خود را از طریق یک فرم ورود ارائه می کند. اگر این اعتبارنامه ها درست باشد، برنامه اطلاعات مربوط به کاربر احراز هویت شده را در جلسه کاربر ذخیره می کند . یک کوکی صادر شده برای مرورگر حاوی شناسه جلسه است تا درخواست‌های بعدی به برنامه بتواند کاربر را با جلسه صحیح مرتبط کند. پس از دریافت کوکی جلسه، برنامه داده های جلسه را بر اساس شناسه جلسه بازیابی می کند، توجه داشته باشید که اطلاعات احراز هویت در جلسه ذخیره شده است و کاربر را به عنوان "تأیید شده" در نظر می گیرد.

هنگامی که یک سرویس راه دور برای دسترسی به یک API نیاز به احراز هویت دارد، کوکی ها معمولاً برای احراز هویت استفاده نمی شوند زیرا مرورگر وب وجود ندارد. در عوض، سرویس راه دور در هر درخواست، یک نشانه API را به API ارسال می کند. برنامه ممکن است توکن دریافتی را در برابر جدولی از نشانه‌های معتبر API تأیید کند و درخواست را به‌عنوان انجام شده توسط کاربر مرتبط با آن توکن API تأیید کند.

خدمات احراز هویت داخلی مرورگر لاراول

لاراول شامل احراز هویت داخلی و خدمات جلسه است که معمولاً از طریق Auth و Session نما قابل دسترسی هستند. این ویژگی‌ها احراز هویت مبتنی بر کوکی را برای درخواست‌هایی که از مرورگرهای وب آغاز می‌شوند، فراهم می‌کنند. آنها روش هایی را ارائه می دهند که به شما امکان می دهد اعتبار یک کاربر را تأیید کنید و کاربر را احراز هویت کنید. علاوه بر این، این سرویس ها به طور خودکار داده های احراز هویت مناسب را در جلسه کاربر ذخیره می کنند و کوکی جلسه کاربر را صادر می کنند. بحث در مورد نحوه استفاده از این خدمات در این مستندات موجود است.

کیت های شروع برنامه

همانطور که در این مستندات توضیح داده شد، می‌توانید به صورت دستی با این سرویس‌های احراز هویت تعامل کنید تا لایه تأیید اعتبار برنامه خود را بسازید. با این حال، برای کمک به شما برای شروع سریع‌تر، بسته‌های رایگانی را منتشر کرده‌ایم که داربست‌های قوی و مدرنی را از کل لایه احراز هویت ارائه می‌کنند. این بسته ها لاراول بریز , لاراول جت استریم و لاراول فورتیفای هستند .

Laravel Breeze یک پیاده‌سازی ساده و حداقلی از تمام ویژگی‌های احراز هویت لاراول، از جمله ورود، ثبت نام، تنظیم مجدد رمز عبور، تأیید ایمیل و تأیید رمز عبور است. لایه نمایش لاراول بریز از قالب های ساده Blade تشکیل شده است که با Tailwind CSS طراحی شده اند . برای شروع، مستندات مربوط به کیت های شروع برنامه لاراول را بررسی کنید .

Laravel Fortify یک پشتیبان احراز هویت بدون سر برای لاراول است که بسیاری از ویژگی‌های موجود در این مستندات را پیاده‌سازی می‌کند، از جمله احراز هویت مبتنی بر کوکی و همچنین ویژگی‌های دیگری مانند احراز هویت دو مرحله‌ای و تأیید ایمیل. Fortify پشتیبان احراز هویت را برای Laravel Jetstream فراهم می کند یا ممکن است به طور مستقل در ترکیب با Laravel Sanctum برای ارائه احراز هویت برای SPA که نیاز به احراز هویت با لاراول دارد استفاده شود.

Laravel Jetstream یک کیت شروع برنامه قوی است که خدمات احراز هویت Laravel Fortify را با یک رابط کاربری زیبا و مدرن که توسط Tailwind CSS ، Livewire و/یا Inertia پشتیبانی می‌شود، مصرف می‌کند و در معرض دید قرار می‌دهد . Laravel Jetstream شامل پشتیبانی اختیاری برای احراز هویت دو مرحله‌ای، پشتیبانی تیمی، مدیریت جلسه مرورگر، مدیریت نمایه و ادغام داخلی با Laravel Sanctum برای ارائه احراز هویت توکن API است. پیشنهادات احراز هویت API لاراول در زیر مورد بحث قرار گرفته است.

خدمات احراز هویت API لاراول

لاراول دو بسته اختیاری برای کمک به شما در مدیریت توکن‌های API و احراز هویت درخواست‌های انجام‌شده با توکن‌های API ارائه می‌کند: Passport و Sanctum . لطفاً توجه داشته باشید که این کتابخانه ها و کتابخانه های احراز هویت مبتنی بر کوکی های داخلی لاراول متقابل نیستند. این کتابخانه ها در درجه اول بر احراز هویت توکن API تمرکز دارند در حالی که سرویس های احراز هویت داخلی بر احراز هویت مرورگر مبتنی بر کوکی تمرکز می کنند. بسیاری از برنامه ها هم از سرویس های احراز هویت مبتنی بر کوکی های داخلی لاراول و هم از بسته های احراز هویت API لاراول استفاده می کنند.

گذرنامه

پاسپورت یک ارائه دهنده احراز هویت OAuth2 است که انواع مختلفی از "انواع اعطای" OAuth2 را ارائه می دهد که به شما امکان می دهد انواع مختلفی از توکن ها را صادر کنید. به طور کلی، این یک بسته قوی و پیچیده برای احراز هویت API است. با این حال، اکثر برنامه ها به ویژگی های پیچیده ارائه شده توسط مشخصات OAuth2 نیاز ندارند، که می تواند هم برای کاربران و هم برای توسعه دهندگان گیج کننده باشد. علاوه بر این، توسعه دهندگان از لحاظ تاریخی در مورد نحوه احراز هویت برنامه های SPA یا برنامه های تلفن همراه با استفاده از ارائه دهندگان احراز هویت OAuth2 مانند پاسپورت سردرگم بوده اند.

پناهگاه

در پاسخ به پیچیدگی OAuth2 و سردرگمی توسعه‌دهندگان، ما تصمیم گرفتیم یک بسته احراز هویت ساده‌تر و کارآمدتر بسازیم که بتواند هم درخواست‌های وب شخص اول از مرورگر وب و هم درخواست‌های API را از طریق توکن‌ها انجام دهد. این هدف با انتشار Laravel Sanctum محقق شد که باید به عنوان بسته احراز هویت ترجیحی و توصیه شده برای برنامه هایی در نظر گرفته شود که علاوه بر API، یک رابط وب شخص اول را علاوه بر API ارائه می دهند یا توسط یک برنامه تک صفحه ای ارائه می شوند. SPA) که به طور جداگانه از برنامه باطن لاراول یا برنامه هایی که مشتری موبایل ارائه می دهند وجود دارد.

Laravel Sanctum یک بسته احراز هویت وب / API ترکیبی است که می تواند کل فرآیند احراز هویت برنامه شما را مدیریت کند. این ممکن است زیرا وقتی برنامه‌های مبتنی بر Sanctum درخواستی را دریافت می‌کنند، Sanctum ابتدا تعیین می‌کند که آیا درخواست شامل کوکی جلسه است که به یک جلسه تأیید شده ارجاع می‌دهد یا خیر. Sanctum این کار را با فراخوانی خدمات احراز هویت داخلی لاراول انجام می دهد که قبلاً در مورد آن صحبت کردیم. اگر درخواست از طریق کوکی جلسه احراز هویت نشود، Sanctum درخواست یک توکن API را بررسی می‌کند. اگر یک توکن API وجود داشته باشد، Sanctum با استفاده از آن توکن درخواست را احراز هویت می‌کند. برای کسب اطلاعات بیشتر در مورد این فرآیند، لطفاً به مستندات "چگونه کار می کند" Sanctum مراجعه کنید .

Laravel Sanctum بسته API است که ما انتخاب کرده‌ایم تا با کیت شروع برنامه Laravel Jetstream اضافه شود زیرا معتقدیم این بسته برای اکثر نیازهای احراز هویت برنامه‌های وب مناسب است.

خلاصه و انتخاب پشته شما

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

در مرحله بعد، اگر برنامه شما یک API ارائه می دهد که توسط اشخاص ثالث مصرف می شود، بین Passport یا Sanctum انتخاب می کنید تا احراز هویت توکن API را برای برنامه خود ارائه دهید. به طور کلی، Sanctum باید در صورت امکان ترجیح داده شود زیرا یک راه حل ساده و کامل برای احراز هویت API، احراز هویت SPA، و احراز هویت تلفن همراه، از جمله پشتیبانی از "scopes" یا "Abilities" است.

اگر در حال ساخت یک برنامه تک صفحه ای (SPA) هستید که توسط یک Backend لاراول پشتیبانی می شود، باید از Laravel Sanctum استفاده کنید . هنگام استفاده از Sanctum، یا باید مسیرهای احراز هویت باطن خود را به صورت دستی پیاده سازی کنید یا از Laravel Fortify به عنوان یک سرویس پشتیبان احراز هویت بدون سر استفاده کنید که مسیرها و کنترلرهایی را برای ویژگی هایی مانند ثبت نام، تنظیم مجدد رمز عبور، تأیید ایمیل و موارد دیگر ارائه می دهد.

پاسپورت ممکن است زمانی انتخاب شود که برنامه شما کاملاً به تمام ویژگی های ارائه شده توسط مشخصات OAuth2 نیاز داشته باشد.

و اگر می‌خواهید سریع شروع کنید، ما خوشحالیم که Laravel Breeze را به عنوان راهی سریع برای راه‌اندازی یک برنامه جدید لاراول که قبلاً از پشته احراز هویت ترجیحی ما از سرویس‌های احراز هویت داخلی لاراول و Laravel Sanctum استفاده می‌کند، توصیه می‌کنیم.

احراز هویت شروع سریع

این بخش از مستندات درباره احراز هویت کاربران از طریق کیت های شروع برنامه لاراول ، که شامل داربست UI برای کمک به شما برای شروع سریع است، بحث می کند. اگر می‌خواهید مستقیماً با سیستم‌های احراز هویت لاراول ادغام شوید، مستندات مربوط به احراز هویت دستی کاربران را بررسی کنید .

یک کیت استارتر نصب کنید

ابتدا باید یک کیت شروع برنامه لاراول نصب کنید . کیت‌های شروع کنونی ما، Laravel Breeze و Laravel Jetstream، نقطه شروعی با طراحی زیبا برای گنجاندن احراز هویت در برنامه جدید Laravel شما ارائه می‌دهند.

Laravel Breeze یک پیاده‌سازی ساده و ساده از تمام ویژگی‌های احراز هویت لاراول، از جمله ورود، ثبت نام، تنظیم مجدد رمز عبور، تأیید ایمیل و تأیید رمز عبور است. لایه نمایش لاراول بریز از قالب های ساده Blade تشکیل شده است که با Tailwind CSS طراحی شده اند . علاوه بر این، Breeze گزینه‌های داربست مبتنی بر Livewire یا Inertia را با انتخاب استفاده از Vue یا React برای داربست مبتنی بر اینرسی ارائه می‌کند.

Laravel Jetstream یک کیت شروع برنامه قوی تر است که شامل پشتیبانی از داربست برنامه شما با Livewire یا Inertia و Vue است . علاوه بر این، Jetstream دارای پشتیبانی اختیاری برای احراز هویت دو مرحله‌ای، تیم‌ها، مدیریت پروفایل، مدیریت جلسه مرورگر، پشتیبانی API از طریق Laravel Sanctum ، حذف حساب و موارد دیگر است.

بازیابی کاربر تایید شده

پس از نصب کیت شروع احراز هویت و اجازه دادن به کاربران برای ثبت نام و احراز هویت با برنامه شما، اغلب باید با کاربر تأیید شده فعلی تعامل داشته باشید. هنگام رسیدگی به درخواست ورودی، می‌توانید از طریق روش Auth نما به کاربر تأیید شده دسترسی داشته باشید user :

use Illuminate\Support\Facades\Auth;
 
// Retrieve the currently authenticated user...
$user = Auth::user();
 
// Retrieve the currently authenticated user's ID...
$id = Auth::id();

از طرف دیگر، هنگامی که یک کاربر احراز هویت شد، می توانید از طریق یک Illuminate\Http\Request نمونه به کاربر احراز هویت شده دسترسی پیدا کنید. به یاد داشته باشید، کلاس های نوع اشاره به طور خودکار به روش های کنترل کننده شما تزریق می شود. با تایپ کردن Illuminate\Http\Request شی، می‌توانید از طریق روش درخواست، از هر روش کنترل‌کننده‌ای در برنامه خود، به کاربر تأیید شده دسترسی راحت داشته باشید user :

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
 
class FlightController extends Controller
{
/**
* Update the flight information for an existing flight.
*/
public function update(Request $request): RedirectResponse
{
$user = $request->user();
 
// ...
 
return redirect('/flights');
}
}

تعیین اینکه آیا کاربر فعلی احراز هویت شده است یا خیر

برای تعیین اینکه آیا کاربری که درخواست HTTP ورودی را تأیید می کند یا خیر، می توانید از check روش روی Auth نما استفاده کنید. true اگر کاربر احراز هویت شود، این روش برمی گردد :

use Illuminate\Support\Facades\Auth;
 
if (Auth::check()) {
// The user is logged in...
}

حتی با وجود اینکه می‌توان با استفاده از این check روش تشخیص داد که آیا یک کاربر احراز هویت شده است، شما معمولاً از یک میان‌افزار برای تأیید احراز هویت کاربر قبل از اجازه دسترسی کاربر به مسیرها / کنترل‌کننده‌های خاص استفاده می‌کنید. برای کسب اطلاعات بیشتر در مورد این، اسناد مربوط به مسیرهای حفاظتی را بررسی کنید .

حفاظت از مسیرها

میان‌افزار Route می‌تواند فقط برای اجازه دادن به کاربران تأیید شده برای دسترسی به یک مسیر مشخص استفاده شود. لاراول با یک auth میان افزار عرضه می شود که نام مستعار میان افزار برای Illuminate\Auth\Middleware\Authenticate کلاس است. از آنجایی که این میان افزار قبلاً توسط لاراول به صورت داخلی نامگذاری شده است، تنها کاری که باید انجام دهید این است که میان افزار را به یک تعریف مسیر متصل کنید:

Route::get('/flights', function () {
// Only authenticated users may access this route...
})->middleware('auth');

هدایت مجدد کاربران احراز هویت نشده

هنگامی که auth میان افزار یک کاربر احراز هویت نشده را شناسایی می کند، کاربر را به login مسیر نامگذاری شده هدایت می کند . می توانید این رفتار را با استفاده از روش فایل redirectGuestsTo برنامه خود تغییر دهید bootstrap/app.php :

use Illuminate\Http\Request;
 
->withMiddleware(function (Middleware $middleware) {
$middleware->redirectGuestsTo('/login');
 
// Using a closure...
$middleware->redirectGuestsTo(fn (Request $request) => route('login'));
})

تعیین نگهبان

هنگام اتصال auth میان‌افزار به یک مسیر، همچنین می‌توانید مشخص کنید که از کدام «گارد» برای احراز هویت کاربر استفاده شود. محافظ مشخص شده باید با یکی از کلیدهای آرایه فایل پیکربندی guards شما مطابقت داشته باشد auth.php :

Route::get('/flights', function () {
// Only authenticated users may access this route...
})->middleware('auth:admin');

سرعت ورود به سیستم

اگر از کیت های شروع Laravel Breeze یا Laravel Jetstream استفاده می کنید ، محدودیت نرخ به طور خودکار برای تلاش های ورود اعمال می شود. به طور پیش فرض، اگر کاربر پس از چندین بار تلاش نتواند اعتبارنامه صحیح را ارائه دهد، به مدت یک دقیقه نمی تواند وارد سیستم شود. throttling برای نام کاربری / آدرس ایمیل کاربر و آدرس IP آنها منحصر به فرد است.

اگر می‌خواهید سایر مسیرها را در برنامه خود رتبه بندی کنید، اسناد محدودکننده نرخ را بررسی کنید .

احراز هویت دستی کاربران

شما نیازی به استفاده از داربست احراز هویت موجود در کیت های شروع برنامه لاراول ندارید . اگر تصمیم گرفتید از این داربست استفاده نکنید، باید احراز هویت کاربر را با استفاده از کلاس های احراز هویت لاراول به طور مستقیم مدیریت کنید. نگران نباش، این یک سینچ است!

Auth ما از طریق نما به خدمات احراز هویت لاراول دسترسی خواهیم داشت ، بنابراین باید مطمئن شویم که Auth نما را در بالای کلاس وارد می کنیم. بعد، بیایید attempt روش را بررسی کنیم. این attempt روش معمولاً برای رسیدگی به تلاش‌های احراز هویت از فرم "ورود" برنامه شما استفاده می‌شود. اگر احراز هویت موفقیت آمیز بود، باید جلسه کاربر را مجدداً ایجاد کنید تا از تثبیت جلسه جلوگیری کنید :

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
 
class LoginController extends Controller
{
/**
* Handle an authentication attempt.
*/
public function authenticate(Request $request): RedirectResponse
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
 
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
 
return redirect()->intended('dashboard');
}
 
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
])->onlyInput('email');
}
}

این attempt روش آرایه ای از جفت های کلید/مقدار را به عنوان اولین آرگومان خود می پذیرد. مقادیر موجود در آرایه برای یافتن کاربر در جدول پایگاه داده شما استفاده خواهد شد. بنابراین، در مثال بالا، کاربر با مقدار ستون بازیابی می شود email . اگر کاربر پیدا شود، رمز عبور هش شده ذخیره شده در پایگاه داده با مقدار password ارسال شده به متد از طریق آرایه مقایسه می شود. شما نباید password مقدار درخواست ورودی را هش کنید، زیرا فریم ورک به طور خودکار مقدار را قبل از مقایسه آن با رمز عبور هش شده در پایگاه داده، هش می کند. اگر دو رمز عبور هش شده مطابقت داشته باشند، یک جلسه احراز هویت برای کاربر شروع می شود.

به یاد داشته باشید، سرویس‌های احراز هویت لاراول، کاربران را از پایگاه داده شما بر اساس پیکربندی «ارائه‌دهنده» گارد احراز هویت شما بازیابی می‌کند. در فایل تنظیمات پیش‌فرض config/auth.php ، ارائه‌دهنده کاربر Eloquent مشخص شده است و به آن دستور داده می‌شود که App\Models\User در هنگام بازیابی کاربران از مدل استفاده کند. شما می توانید این مقادیر را در فایل پیکربندی خود بر اساس نیازهای برنامه خود تغییر دهید.

در صورت موفقیت آمیز بودن احراز هویت، روش attempt برمی گردد true . در غیر این صورت false عودت داده می شود.

روش intended ارائه شده توسط Redirector لاراول، کاربر را به URL هدایت می کند که قبل از اینکه توسط میان افزار احراز هویت رهگیری شود، سعی می کرد به آن دسترسی پیدا کند. در صورتی که مقصد مورد نظر در دسترس نباشد، ممکن است یک URI بازگشتی به این روش داده شود.

تعیین شرایط اضافی

در صورت تمایل، می توانید علاوه بر ایمیل و رمز عبور کاربر، شرایط پرس و جو اضافی را نیز به درخواست احراز هویت اضافه کنید. برای انجام این کار، ممکن است به سادگی شرایط پرس و جو را به آرایه ارسال شده به attempt متد اضافه کنیم. به عنوان مثال، ممکن است بررسی کنیم که کاربر به عنوان "فعال" علامت گذاری شده است:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// Authentication was successful...
}

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

use Illuminate\Database\Eloquent\Builder;
 
if (Auth::attempt([
'email' => $email,
'password' => $password,
fn (Builder $query) => $query->has('activeSubscription'),
])) {
// Authentication was successful...
}

در این مثال ها، email یک گزینه الزامی نیست، فقط به عنوان مثال استفاده می شود. شما باید از هر نام ستونی که با "نام کاربری" در جدول پایگاه داده خود مطابقت دارد استفاده کنید.

این attemptWhen روش، که بسته شدن را به عنوان آرگومان دوم خود دریافت می‌کند، ممکن است برای انجام بازرسی گسترده‌تر از کاربر احتمالی قبل از احراز هویت کاربر استفاده شود. بسته شدن کاربر بالقوه را دریافت می کند و باید برگردد true یا false نشان دهد که آیا کاربر ممکن است احراز هویت شده باشد:

if (Auth::attemptWhen([
'email' => $email,
'password' => $password,
], function (User $user) {
return $user->isNotBanned();
})) {
// Authentication was successful...
}

دسترسی به موارد خاص گارد

از طریق روش Auth نما guard ، می‌توانید مشخص کنید که می‌خواهید هنگام احراز هویت کاربر از کدام نمونه محافظ استفاده کنید. این به شما امکان می دهد تا با استفاده از مدل های کاملاً مجزا یا جداول کاربر، احراز هویت را برای بخش های جداگانه برنامه خود مدیریت کنید.

نام محافظ ارسال شده به guard متد باید با یکی از محافظ های پیکربندی شده در auth.php فایل پیکربندی شما مطابقت داشته باشد:

if (Auth::guard('admin')->attempt($credentials)) {
// ...
}

به یاد آوردن کاربران

بسیاری از برنامه های کاربردی وب در فرم ورود به سیستم خود یک کادر انتخاب "مرا به خاطر بسپار" ارائه می کنند. اگر می‌خواهید عملکرد "مرا به خاطر بسپار" را در برنامه خود ارائه دهید، می‌توانید یک مقدار بولی را به عنوان آرگومان دوم به متد ارسال کنید attempt .

وقتی این مقدار باشد true ، لاراول کاربر را به طور نامحدود یا تا زمانی که به صورت دستی از سیستم خارج شود، احراز هویت می‌کند. users جدول شما باید شامل remember_token ستون رشته باشد که برای ذخیره رمز "مرا به خاطر بسپار" استفاده می شود. انتقال users جدول همراه با برنامه های جدید لاراول قبلاً شامل این ستون است:

use Illuminate\Support\Facades\Auth;
 
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// The user is being remembered...
}

اگر برنامه شما عملکرد "مرا به خاطر بسپار" را ارائه می دهد، می توانید از این viaRemember روش برای تعیین اینکه آیا کاربر تأیید شده فعلی با استفاده از کوکی "مرا به خاطر بسپار" احراز هویت شده است یا خیر استفاده کنید:

use Illuminate\Support\Facades\Auth;
 
if (Auth::viaRemember()) {
// ...
}

سایر روش های احراز هویت

احراز هویت یک نمونه کاربر

اگر نیاز دارید یک نمونه کاربری موجود را به عنوان کاربر تأیید شده فعلی تنظیم کنید، می توانید نمونه کاربر را به روش Auth نما منتقل کنید login . نمونه کاربر داده شده باید اجرای قرارداد Illuminate\Contracts\Auth\Authenticatable باشد . مدل App\Models\User موجود با لاراول قبلاً این رابط را پیاده سازی کرده است. این روش احراز هویت زمانی مفید است که شما قبلاً یک نمونه کاربری معتبر دارید، مانند مستقیماً پس از ثبت نام کاربر در برنامه شما:

use Illuminate\Support\Facades\Auth;
 
Auth::login($user);

می توانید یک مقدار بولی را به عنوان آرگومان دوم به login متد ارسال کنید. این مقدار نشان می دهد که آیا عملکرد "مرا به خاطر بسپار" برای جلسه تأیید شده مورد نظر است یا خیر. به یاد داشته باشید، این بدان معنی است که جلسه به طور نامحدود یا تا زمانی که کاربر به صورت دستی از برنامه خارج شود تأیید می شود:

Auth::login($user, $remember = true);

در صورت نیاز، می توانید قبل از فراخوانی login روش، یک محافظ احراز هویت را مشخص کنید:

Auth::guard('admin')->login($user);

احراز هویت یک کاربر با شناسه

برای احراز هویت یک کاربر با استفاده از کلید اصلی رکورد پایگاه داده آنها، می توانید از این loginUsingId روش استفاده کنید. این روش کلید اصلی کاربری را که می خواهید احراز هویت کنید می پذیرد:

Auth::loginUsingId(1);

می توانید یک مقدار بولی را به عنوان آرگومان دوم به loginUsingId متد ارسال کنید. این مقدار نشان می دهد که آیا عملکرد "مرا به خاطر بسپار" برای جلسه تأیید شده مورد نظر است یا خیر. به یاد داشته باشید، این بدان معنی است که جلسه به طور نامحدود یا تا زمانی که کاربر به صورت دستی از برنامه خارج شود تأیید می شود:

Auth::loginUsingId(1, $remember = true);

یک بار یک کاربر را احراز هویت کنید

می توانید از این once روش برای احراز هویت یک کاربر با برنامه برای یک درخواست استفاده کنید. هنگام فراخوانی این روش از هیچ جلسه یا کوکی استفاده نمی شود:

if (Auth::once($credentials)) {
// ...
}

احراز هویت پایه HTTP

HTTP Basic Authentication راهی سریع برای احراز هویت کاربران برنامه شما بدون راه اندازی یک صفحه اختصاصی "ورود" فراهم می کند. برای شروع، auth.basic میان افزار را به یک مسیر متصل کنید. میان auth.basic افزار با چارچوب لاراول گنجانده شده است، بنابراین نیازی به تعریف آن ندارید:

Route::get('/profile', function () {
// Only authenticated users may access this route...
})->middleware('auth.basic');

هنگامی که میان افزار به مسیر متصل شد، هنگام دسترسی به مسیر در مرورگر خود، به طور خودکار از شما خواسته می شود اعتبارنامه را دریافت کنید. به طور پیش فرض، auth.basic میان افزار فرض می کند که email ستون روی جدول پایگاه داده شما users "نام کاربری" کاربر است.

یادداشتی در مورد FastCGI

اگر از PHP FastCGI و Apache برای ارائه برنامه لاراول خود استفاده می کنید، احراز هویت پایه HTTP ممکن است به درستی کار نکند. برای اصلاح این مشکلات، خطوط زیر ممکن است به فایل برنامه شما اضافه شود .htaccess :

RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

احراز هویت پایه HTTP بدون تابعیت

همچنین می توانید از احراز هویت پایه HTTP بدون تنظیم کوکی شناسه کاربر در جلسه استفاده کنید. اگر بخواهید از HTTP Authentication برای احراز هویت درخواست ها به API برنامه خود استفاده کنید، این در درجه اول مفید است. برای انجام این کار، میان افزاری تعریف کنید که onceBasic متد را فراخوانی کند. اگر هیچ پاسخی توسط روش برگردانده نشد onceBasic ، درخواست ممکن است بیشتر به برنامه ارسال شود:

<?php
 
namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
 
class AuthenticateOnceWithBasicAuth
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
return Auth::onceBasic() ?: $next($request);
}
 
}

بعد، میان افزار را به یک مسیر متصل کنید:

Route::get('/api/user', function () {
// Only authenticated users may access this route...
})->middleware(AuthenticateOnceWithBasicAuth::class);

خروج از سیستم

برای خروج دستی کاربران از برنامه خود، می توانید از logout روش ارائه شده توسط Auth نما استفاده کنید. با این کار اطلاعات احراز هویت از جلسه کاربر حذف می شود تا درخواست های بعدی احراز هویت نشوند.

علاوه بر فراخوانی logout متد، توصیه می‌شود که جلسه کاربر را باطل کنید و رمز CSRF او را بازسازی کنید . پس از خروج کاربر، معمولاً کاربر را به ریشه برنامه خود هدایت می کنید:

use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
 
/**
* Log the user out of the application.
*/
public function logout(Request $request): RedirectResponse
{
Auth::logout();
 
$request->session()->invalidate();
 
$request->session()->regenerateToken();
 
return redirect('/');
}

باطل کردن جلسات در سایر دستگاه ها

لاراول همچنین مکانیزمی را برای باطل کردن و «خروج از سیستم» جلسات کاربر که در دستگاه‌های دیگر فعال هستند، بدون نامعتبر کردن جلسه در دستگاه فعلی‌شان ارائه می‌کند. این ویژگی معمولاً زمانی استفاده می‌شود که کاربر در حال تغییر یا به‌روزرسانی رمز عبور خود است و شما می‌خواهید جلسات را در دستگاه‌های دیگر باطل کنید و در عین حال دستگاه فعلی را احراز هویت کنید.

قبل از شروع، باید مطمئن شوید که Illuminate\Session\Middleware\AuthenticateSession میان افزار در مسیرهایی که باید احراز هویت جلسه را دریافت کنند، گنجانده شده است. به طور معمول، شما باید این میان افزار را در یک تعریف گروه مسیر قرار دهید تا بتوان آن را در اکثر مسیرهای برنامه شما اعمال کرد. به طور پیش فرض، میان افزار ممکن است با استفاده از نام مستعار میان افزار AuthenticateSession به مسیری متصل شود : auth.session

Route::middleware(['auth', 'auth.session'])->group(function () {
Route::get('/', function () {
// ...
});
});

سپس می توانید از logoutOtherDevices روش ارائه شده توسط Auth نما استفاده کنید. این روش از کاربر می‌خواهد تا رمز عبور فعلی خود را تأیید کند، که درخواست شما باید از طریق یک فرم ورودی آن را بپذیرد:

use Illuminate\Support\Facades\Auth;
 
Auth::logoutOtherDevices($currentPassword);

هنگامی که logoutOtherDevices متد فراخوانی می شود، سایر جلسات کاربر به طور کامل باطل می شوند، به این معنی که از تمام محافظ هایی که قبلاً توسط آنها احراز هویت شده بودند، "خارج می شوند".

تایید رمز عبور

در حین ساخت برنامه خود، ممکن است گهگاه اقداماتی داشته باشید که باید کاربر را ملزم به تأیید رمز عبور خود قبل از انجام عمل یا قبل از هدایت کاربر به ناحیه حساس برنامه کند. لاراول شامل میان‌افزار داخلی است تا این فرآیند را آسان کند. پیاده سازی این ویژگی مستلزم تعریف دو مسیر است: یک مسیر برای نمایش نمایی که از کاربر می خواهد رمز عبور خود را تأیید کند و مسیر دیگر برای تأیید معتبر بودن رمز عبور و هدایت کاربر به مقصد مورد نظر.

مستندات زیر نحوه ادغام مستقیم با ویژگی های تایید رمز عبور لاراول را مورد بحث قرار می دهد. با این حال، اگر می‌خواهید سریع‌تر شروع کنید، کیت‌های شروع برنامه لاراول از این ویژگی پشتیبانی می‌کنند!

پیکربندی

پس از تایید رمز عبور، تا سه ساعت دیگر از کاربر درخواست نمی شود که رمز عبور خود را تایید کند. با این حال، می‌توانید مدت زمانی را که از کاربر خواسته می‌شود رمز عبور خود را مجدداً با تغییر مقدار مقدار password_timeout پیکربندی در فایل پیکربندی برنامه خود پیکربندی کنید config/auth.php .

مسیریابی

فرم تایید رمز عبور

ابتدا مسیری را برای نمایش نمایی تعریف می کنیم که از کاربر می خواهد رمز عبور خود را تأیید کند:

Route::get('/confirm-password', function () {
return view('auth.confirm-password');
})->middleware('auth')->name('password.confirm');

همانطور که ممکن است انتظار داشته باشید، نمای بازگردانده شده توسط این مسیر باید دارای یک فرم حاوی یک password فیلد باشد. علاوه بر این، با خیال راحت متنی را در نما اضافه کنید که توضیح می دهد کاربر در حال ورود به یک منطقه محافظت شده از برنامه است و باید رمز عبور خود را تأیید کند.

تایید رمز عبور

در مرحله بعد، مسیری را تعریف می کنیم که درخواست فرم را از نمای "تأیید رمز عبور" انجام می دهد. این مسیر مسئول اعتبارسنجی رمز عبور و هدایت کاربر به مقصد مورد نظر خود خواهد بود:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Redirect;
 
Route::post('/confirm-password', function (Request $request) {
if (! Hash::check($request->password, $request->user()->password)) {
return back()->withErrors([
'password' => ['The provided password does not match our records.']
]);
}
 
$request->session()->passwordConfirmed();
 
return redirect()->intended();
})->middleware(['auth', 'throttle:6,1']);

قبل از حرکت، اجازه دهید این مسیر را با جزئیات بیشتری بررسی کنیم. ابتدا، فیلد درخواست password تعیین می شود که در واقع با رمز عبور کاربر تأیید شده مطابقت داشته باشد. اگر رمز عبور معتبر است، باید به جلسه لاراول اطلاع دهیم که کاربر رمز عبور خود را تایید کرده است. این passwordConfirmed روش یک مهر زمانی در جلسه کاربر تعیین می کند که لاراول می تواند برای تعیین آخرین زمان تایید رمز عبور کاربر از آن استفاده کند. در نهایت، ما می توانیم کاربر را به مقصد مورد نظر خود هدایت کنیم.

حفاظت از مسیرها

باید اطمینان حاصل کنید که هر مسیری که عملی را انجام می دهد که نیاز به تأیید رمز عبور اخیر دارد، به password.confirm میان افزار اختصاص داده شده است. این میان افزار همراه با نصب پیش فرض لاراول است و به طور خودکار مقصد مورد نظر کاربر را در جلسه ذخیره می کند تا کاربر پس از تایید رمز عبور خود به آن مکان هدایت شود. پس از ذخیره مقصد مورد نظر کاربر در جلسه، میان افزار کاربر را به password.confirm مسیر نامگذاری شده هدایت می کند :

Route::get('/settings', function () {
// ...
})->middleware(['password.confirm']);
 
Route::post('/settings', function () {
// ...
})->middleware(['password.confirm']);

افزودن گاردهای سفارشی

extend شما می توانید با استفاده از روش روی نما ، محافظ های احراز هویت خود را تعریف کنید Auth . شما باید تماس خود را با extend روش در یک ارائه دهنده خدمات برقرار کنید . از آنجایی که لاراول قبلاً با یک ارسال می شود AppServiceProvider ، می توانیم کد را در آن ارائه دهنده قرار دهیم:

<?php
 
namespace App\Providers;
 
use App\Services\Auth\JwtGuard;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
// ...
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Auth::extend('jwt', function (Application $app, string $name, array $config) {
// Return an instance of Illuminate\Contracts\Auth\Guard...
 
return new JwtGuard(Auth::createUserProvider($config['provider']));
});
}
}

همانطور که در مثال بالا می بینید، فراخوانی که به extend متد ارسال می شود باید پیاده سازی از Illuminate\Contracts\Auth\Guard . این رابط شامل چند روش است که برای تعریف گارد سفارشی باید پیاده سازی کنید. هنگامی که گارد سفارشی شما تعریف شد، می توانید در guards پیکربندی فایل پیکربندی خود به محافظ اشاره کنید auth.php :

'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],

نگهبانان درخواست بسته شدن

ساده ترین راه برای پیاده سازی یک سیستم احراز هویت سفارشی مبتنی بر درخواست HTTP، استفاده از Auth::viaRequest روش است. این روش به شما اجازه می دهد تا با استفاده از یک بسته به سرعت فرآیند احراز هویت خود را تعریف کنید.

برای شروع، Auth::viaRequest متد را در boot متد برنامه خود فراخوانی کنید AppServiceProvider . این viaRequest متد یک نام درایور احراز هویت را به عنوان اولین آرگومان خود می پذیرد. این نام می تواند هر رشته ای باشد که گارد سفارشی شما را توصیف کند. آرگومان دومی که به متد ارسال می‌شود باید بسته‌ای باشد که درخواست HTTP ورودی را دریافت می‌کند و نمونه‌ای از کاربر را برمی‌گرداند یا در صورت عدم موفقیت احراز هویت، null :

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Auth::viaRequest('custom-token', function (Request $request) {
return User::where('token', (string) $request->token)->first();
});
}

هنگامی که درایور احراز هویت سفارشی شما تعریف شد، می توانید آن را به عنوان یک درایور در پیکربندی فایل پیکربندی guards خود پیکربندی کنید: auth.php

'guards' => [
'api' => [
'driver' => 'custom-token',
],
],

در نهایت، هنگام اختصاص دادن میان افزار احراز هویت به یک مسیر، می توانید به محافظ اشاره کنید:

Route::middleware('auth:api')->group(function () {
// ...
});

اضافه کردن ارائه دهندگان کاربر سفارشی

اگر از یک پایگاه داده سنتی رابطه ای برای ذخیره کاربران خود استفاده نمی کنید، باید لاراول را با ارائه دهنده کاربر احراز هویت خود گسترش دهید. ما از provider روش روی Auth نما برای تعریف یک ارائه دهنده کاربر سفارشی استفاده خواهیم کرد. حل‌کننده ارائه‌دهنده کاربر باید پیاده‌سازی از Illuminate\Contracts\Auth\UserProvider :

<?php
 
namespace App\Providers;
 
use App\Extensions\MongoUserProvider;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
// ...
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Auth::provider('mongo', function (Application $app, array $config) {
// Return an instance of Illuminate\Contracts\Auth\UserProvider...
 
return new MongoUserProvider($app->make('mongo.connection'));
});
}
}

پس از اینکه ارائه دهنده را با استفاده از روش ثبت کردید provider ، می توانید در auth.php فایل پیکربندی خود به ارائه دهنده کاربر جدید بروید. ابتدا یک provider درایور جدید را تعریف کنید:

'providers' => [
'users' => [
'driver' => 'mongo',
],
],

در نهایت، می توانید در guards پیکربندی خود به این ارائه دهنده اشاره کنید:

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
],

قرارداد ارائه دهنده کاربر

Illuminate\Contracts\Auth\UserProvider پیاده سازی ها مسئول واکشی یک Illuminate\Contracts\Auth\Authenticatable پیاده سازی از یک سیستم ذخیره سازی دائمی مانند MySQL، MongoDB و غیره هستند. این دو رابط به مکانیزم های احراز هویت لاراول اجازه می دهند بدون توجه به نحوه ذخیره داده های کاربر یا نوع کلاسی که برای نمایش استفاده می شود، به عملکرد خود ادامه دهند. کاربر تایید شده:

بیایید نگاهی به Illuminate\Contracts\Auth\UserProvider قرارداد بیندازیم:

<?php
 
namespace Illuminate\Contracts\Auth;
 
interface UserProvider
{
public function retrieveById($identifier);
public function retrieveByToken($identifier, $token);
public function updateRememberToken(Authenticatable $user, $token);
public function retrieveByCredentials(array $credentials);
public function validateCredentials(Authenticatable $user, array $credentials);
public function rehashPasswordIfRequired(Authenticatable $user, array $credentials, bool $force = false);
}

تابع retrieveById معمولاً کلیدی را دریافت می کند که کاربر را نشان می دهد، مانند شناسه افزایش خودکار از پایگاه داده MySQL. پیاده Authenticatable سازی منطبق با شناسه باید با روش بازیابی و برگردانده شود.

این retrieveByToken تابع یک کاربر را با منحصر به فرد $identifier و "مرا به خاطر بسپار" را بازیابی می کند $token که معمولاً در یک ستون پایگاه داده مانند ذخیره می شود remember_token . همانند روش قبلی، Authenticatable پیاده سازی با مقدار توکن منطبق باید توسط این روش برگردانده شود.

این updateRememberToken روش $user نمونه ها را remember_token با جدید به روز می کند $token . یک توکن تازه به کاربران در تلاش موفقیت آمیز احراز هویت "به خاطر بسپار" یا زمانی که کاربر در حال خروج از سیستم است، اختصاص داده می شود.

این روش هنگام تلاش برای احراز هویت با یک برنامه، retrieveByCredentials آرایه ای از اعتبارنامه ها را دریافت می کند . Auth::attempt سپس این روش باید برای کاربر مطابق با آن اعتبارنامه ها، فضای ذخیره سازی دائمی زیرین را "پرس و جو" کند. به طور معمول، این روش یک پرس و جو را با یک شرط "where" اجرا می کند که یک رکورد کاربر را با "نام کاربری" مطابق با مقدار جستجو می کند $credentials['username'] . متد باید پیاده سازی از Authenticatable . این روش نباید هیچ گونه اعتبارسنجی یا احراز هویت رمز عبور را انجام دهد.

این روش باید برای احراز هویت کاربر، validateCredentials داده های داده شده را $user با آن مقایسه کند. $credentials به عنوان مثال، این روش معمولاً از Hash::check روش برای مقایسه مقدار $user->getAuthPassword() با مقدار استفاده می کند $credentials['password'] . این روش باید برگردد true یا false نشان دهد که آیا رمز عبور معتبر است یا خیر.

در صورت نیاز و پشتیبانی، این rehashPasswordIfRequired روش باید رمز عبور داده شده را مجدداً بازنویسی کند . $user به عنوان مثال، این روش معمولاً از این Hash::needsRehash روش برای تعیین اینکه آیا $credentials['password'] مقدار نیاز به بازنویسی مجدد دارد یا خیر استفاده می کند. اگر گذرواژه نیاز به بازنویسی مجدد داشته باشد، روش باید از روشی Hash::make برای بازنویسی مجدد رمز عبور و به‌روزرسانی رکورد کاربر در حافظه دائمی زیرین استفاده کند.

قرارداد قابل احراز هویت

اکنون که هر یک از روش ها را بررسی کردیم UserProvider ، اجازه دهید نگاهی به Authenticatable قرارداد بیندازیم. به یاد داشته باشید، ارائه دهندگان کاربر باید پیاده سازی های این رابط را از retrieveById , retrieveByToken و retrieveByCredentials متدهای زیر برگردانند:

<?php
 
namespace Illuminate\Contracts\Auth;
 
interface Authenticatable
{
public function getAuthIdentifierName();
public function getAuthIdentifier();
public function getAuthPasswordName();
public function getAuthPassword();
public function getRememberToken();
public function setRememberToken($value);
public function getRememberTokenName();
}

این رابط کاربری ساده است. متد getAuthIdentifierName باید نام ستون "کلید اصلی" را برای کاربر برگرداند و getAuthIdentifier متد باید "کلید اصلی" کاربر را برگرداند. هنگام استفاده از بک‌اند MySQL، احتمالاً این کلید اصلی افزایش خودکار است که به رکورد کاربر اختصاص داده می‌شود. روش getAuthPasswordName باید نام ستون رمز عبور کاربر را برگرداند. روش getAuthPassword باید رمز عبور هش شده کاربر را برگرداند.

این رابط به سیستم احراز هویت اجازه می دهد تا با هر کلاس "کاربر"، صرف نظر از اینکه از چه ORM یا لایه انتزاعی ذخیره سازی استفاده می کنید، کار کند. به طور پیش فرض، لاراول شامل یک App\Models\User کلاس در app/Models دایرکتوری است که این رابط را پیاده سازی می کند.

مناسبت ها

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

نام رخداد
Illuminate\Auth\Events\Registered
Illuminate\Auth\Events\Attempting
Illuminate\Auth\Events\Authenticated
Illuminate\Auth\Events\Login
Illuminate\Auth\Events\Failed
Illuminate\Auth\Events\Validated
Illuminate\Auth\Events\Verified
Illuminate\Auth\Events\Logout
Illuminate\Auth\Events\CurrentDeviceLogout
Illuminate\Auth\Events\OtherDeviceLogout
Illuminate\Auth\Events\Lockout
Illuminate\Auth\Events\PasswordReset