محتويات الدورة

Laravel / حدود التطبيق وسير العمل الموثوق / الدرس 9

المصادقة ودورة حياة الجلسة

افصل الهوية عن الإذن وافهم الدخول وتدوير الجلسة والطلبات والخروج كدورة واحدة.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • الهوية ليست تفويضا
  • تدوير الجلسة بعد نجاح المصادقة
  • التحقق من النجاح والرفض والاستمرار

الهوية ليست تفويضا

تحدد المصادقة من يعرفه التطبيق والتفويض ما يفعله. تصف guards آلية الطلب وproviders جلب المستخدم. تختلف جلسة المتصفح والرمز؛ فافحص الحارس والوسيط والإعداد. توفر البداية المعتمدة أساسا ولا تعوض ملفات الارتباط والتخزين وتحديد المحاولات والاسترداد والصلاحيات.

تعتمد جلسة الارتباط حدودا متعددة

تحتاج الجلسة وسيط web ومخزنا يعمل وارتباطا يصل للأصل الصحيح، وتؤثر HTTPS وسياسة النطاق وsame-site والوكيل. قد تنجح البيانات ثم ينسى الطلب التالي بسبب المضيف أو التخزين. لا تعرض الأسرار بالعنوان ولا تعطل CSRF؛ لكل نموذج أو API ترتيبه الموثق. أبعد الاعتمادات الحقيقية عن السجلات والعينات.

تدوير الجلسة بعد نجاح المصادقة

يفترض المتحكم مستخدما مصطنعا بكلمة مجزأة وweb وCSRF ومحددا مسمى للمحاولات. يتحقق من الشكل ويمرر كلمة الإدخال إلى Auth::attempt ثم يجدد الجلسة. لا تجزئها أولا؛ يفحصها المزود. يحفظ الفشل البريد فقط وبرسالة عامة. لا ينفذ المقطع التسجيل والاسترداد والتحقق والمحدد؛ وفرها بالتكامل المراجع.

php مقطع سياقي لتطبيق Laravel 12
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
    public function store(Request $request): RedirectResponse
    {
        $credentials = $request->validate([
            "email" => ["required", "email"],
            "password" => ["required", "string"],
        ]);
        if (Auth::guard("web")->attempt($credentials)) {
            $request->session()->regenerate();
            return redirect()->intended("/dashboard");
        }
        return back()->withErrors(["email" => "The provided credentials are invalid."])
            ->withInput($request->only("email"));
    }
}
الناتج المتوقع
Valid isolated credentials: authenticated web session then intended redirect. Invalid credentials: email error and no password flash.

يتطلب POST محميا ومحدد محاولات ومخزن جلسة ومستخدما مصطنعا مجزأ. يدور النجاح الجلسة ولا يعيد الفشل كلمة السر.

إنهاء الجلسة المصادقة عمدا

يسجل الثاني خروج web ويبطل الجلسة ويجدد CSRF ثم يعيد، خلف POST وweb لا رابط GET. لا يعني ذلك كل جهاز ورمز ومزود خارجي؛ حدد النطاق. اختبر طلبا محميا تاليا لا الإعادة وحدها، ووضح سلوك التبويبات المتشاركة.

php مقطع سياقي لتطبيق Laravel 12
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
class LogoutController extends Controller
{
    public function destroy(Request $request): RedirectResponse
    {
        Auth::guard("web")->logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();
        return redirect("/");
    }
}
الناتج المتوقع
After isolated logout, a subsequent protected web request follows the guest-access contract.

اربطه بخروج POST وCSRF العادية؛ ينهي الجلسة الحالية لا كل رمز وجهاز.

التحقق من النجاح والرفض والاستمرار

اختبر النجاح والفشل والمحدد وطلب الضيف والتدوير وما بعد الخروج بعزل. تفيد actingAs لما بعد الدخول ولا تختبر بياناته ومساره. يختلف المفقود من المعروف الممنوع وتختلف إعادة الويب من JSON. اختبر التذكر والأجهزة فقط إن دعمتها. هذه مقاطع للمراجعة لا اتصال أو دخول منفذ.

الأخطاء الشائعة وإصلاحها

ينجح الدخول ثم يختفي

لماذا يحدث؟
لا يتطابق أصل الارتباط أو حفظ الجلسة.
كيف تصلحه؟
افحص المخزن والمضيف وHTTPS والسياسة.
كيف تتجنب تكراره؟
اختبر طلبات متتالية بالأصل.

تفشل الصحيحة بعد التجزئة اليدوية

لماذا يحدث؟
حُولت قبل فحص المزود.
كيف تصلحه؟
مرر كلمة الإدخال وفق العقد.
كيف تتجنب تكراره؟
جزئ عند التخزين فقط.

تعد الإعادة دليلا للخروج

لماذا يحدث؟
لم يفحص الطلب التالي.
كيف تصلحه؟
أكد سلوك الضيف لاحقا.
كيف تتجنب تكراره؟
اختبر الدورة كاملة.

اختبر فهمك

1. لماذا لا تثبت actingAs تحقق نموذج الدخول؟

اعرض الحل المشروح

تنشئ هوية اختبار متخطية الإرسال. أضف طلبات مستقلة بصحيح وخاطئ مصطنعين وافحص الحارس والجلسة.

2. هل يعدل الداخل منشور غيره تلقائيا؟

اعرض الحل المشروح

لا؛ توفر الجلسة الهوية وتقرر السياسة التعديل. صادق المسار وفوض Post قبل التغيير، ولا يفرض إخفاء الزر العملية.

أهم ما تعلمته

  • توفر المصادقة الهوية لا إذنا شاملا.
  • يحتاج التدوير والخروج اختبار عمر.
  • وضح افتراض الحارس والارتباط.

المراجع الرسمية