ازاي تبني نظام تسجيل دخول (Authentication) في لارافيل من الصفر؟
كتير مننا كمبرمجين بيعتمدوا بشكل كلي على حزم جاهزة زي Laravel Breeze أو Jetstream، وده شيء عظيم وبيوفر وقت. لكن، هل سألت نفسك قبل كدة: "هو ايه اللي بيحصل تحت الكبوت؟" لو حبيت تعمل نظام صلاحيات (Authorization) مخصص أو تحكم كامل في الـ Session، هتلاقي نفسك واقف في حتة ضلمة لو مش فاهم الأساسيات. النهاردة هنشرح إزاي تبني نظام دخول من الصفر في لارافيل (Laravel) بدون أي إضافات خارجية، عشان تكون فاهم كل سطر كود بتكتبه.
Table of contents [Show]
ليه محتاج تبني نظام Authentication يدوي؟
مش دايماً الحزم الجاهزة بتناسب متطلبات العميل. أحياناً بتحتاج دورة حياة (Lifecycle) معينة للمستخدم، أو ربط مع قاعدة بيانات خارجية، أو نظام تحقق (Verification) مخصص. فهمك للـ Authentication الأساسي هيخليك مبرمج أقوى بكتير، وهيعلمك إزاي لارافيل بيتعامل مع التوكينز (Tokens) والسيشن (Session).
الخطوة الأولى: تهيئة قاعدة البيانات والنموذج
أول حاجة محتاجينها هي جدول المستخدمين. لارافيل بييجي بجدول users جاهز، لكن خلينا نفترض إنك هتنشئ النظام يدوي. تأكد إن موديل الـ User بيعمل extend لكلاس Authenticatable عشان يقدر يتعامل مع نظام الدخول.
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
}
الخطوة الثانية: التحكم في عملية تسجيل الدخول (Login Logic)
في الـ Controller بتاعك، هنستخدم الـ Auth Facade. الميثود الأهم هنا هي attempt، واللي بتقوم بوظيفتين: التأكد من صحة البيانات، وإنشاء السيشن (Session) للمستخدم في حال كانت البيانات صحيحة.
public function login(Request $request)
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended('dashboard');
}
return back()->withErrors([
'email' => 'البيانات دي مش مطابقة للسجلات عندنا.',
]);
}
الخطوة الثالثة: حماية المسارات (Middleware)
مش كفاية إننا نعمل تسجيل دخول، لازم نحمي الصفحات اللي المستخدم مش لازم يشوفها وهو "مش مسجل". هنا بيجي دور الـ Middleware. لارافيل بيوفر auth middleware جاهز، لكن فهم إزاي هو بيشتغل (إنه بيعمل Redirect للـ login route لو المستخدم مش مسجل) شيء جوهري.
تقدر تستخدمه في ملف الـ routes/web.php كدة:
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
return view('dashboard');
});
});
الخطوة الرابعة: التعامل مع الـ Logout
إنهاء الجلسة سهل جداً، كل اللي محتاجه إنك تنهي الـ Session وتمسح الـ Authentication state من الكوكيز (Cookies).
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
نصيحة من أخ لمبرمج
يا بطل، الحزم الجاهزة (Packages) زي Breeze موجودة عشان تسرع شغلك، مش عشان تغنيك عن الفهم. جرب تبني نظام تسجيل دخول مرة واحدة بس بإيدك من الصفر، وهتلاقي نفسك بقيت بتشوف الكود بتاع لارافيل بنظرة تانية خالص. افهم إزاي الـ Guards بيشتغلوا، وازاي الـ Providers بيجيبوا البيانات، ولما تفهم دول، هتكون جاهز تتعامل مع أي تحدي أمني في مشاريعك الجاية.
بالتوفيق في رحلتك البرمجية، وخليك دايماً فضولي تجاه التفاصيل الصغيرة!