إزاي تأمن الـ API الخاص بيك في لارافيل باستخدام Laravel Sanctum
أهلاً بك يا بطل في درس جديد من دروس تطوير الويب. أكيد جالك وقت وأنت بتبني مشروعك باستخدام لارافيل (Laravel) وفكرت، يا ترى إزاي أخلي الـ API بتاعي محمي؟ وإزاي أضمن إن الشخص اللي بيبعت الطلبات (Requests) هو فعلاً المستخدم اللي أنا عارفه؟ زمان كان الموضوع معقد شوية وبنضطر نستخدم مكتبات خارجية أو نكتب كود كتير عشان الـ Authentication، لكن النهاردة معانا "المنقذ" Laravel Sanctum.
Table of contents [Show]
يعني إيه Laravel Sanctum وليه لازم نستخدمه؟
حزمة لارافيل سانكتوم (Laravel Sanctum) هي الطريقة الرسمية والأسهل عشان تعمل نظام تأمين (Authentication) للـ APIs الخاصة بيك. سواء كنت بتبني تطبيق موبايل، أو تطبيق SPA زي React أو Vue، سانكتوم بيوفرلك نظام رموز الوصول (API Tokens) خفيف وسريع، وفي نفس الوقت بيوفر حماية للـ Sessions لو كنت بتستخدم نفس النطاق (Domain) بتاعك.
خطوات تثبيت وإعداد Sanctum في مشروعك
عشان نبدأ، الموضوع بسيط جداً ومش محتاج تعقيد. اتبع الخطوات دي:
- تثبيت الحزمة عبر مدير الحزم كومبوزر (Composer):
composer require laravel/sanctum - نشر ملف الإعدادات الخاص بالـ Configuration:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" - عمل Migration للجداول الخاصة بـ Sanctum:
php artisan migrate
ربط الـ User بالـ Tokens
دلوقتي لازم نروح لموديل المستخدم (User Model) ونضيف التريت (Trait) اللي بيخلي المستخدم يقدر يصدر رموز دخول. افتح ملف app/Models/User.php وأضف الكود ده:
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
إزاي تنشئ رمز وصول (Token) للمستخدم؟
لما المستخدم يسجل دخول أو يعمل Login، إحنا محتاجين نرجعله Token عشان يستخدمه في الـ Requests الجاية. تقدر تعمل ده في الـ Controller بتاعك بالطريقة دي:
public function login(Request $request)
{
$user = User::where('email', $request->email)->first();
// التأكد من كلمة السر
if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json(['message' => 'بيانات الدخول غير صحيحة'], 401);
}
// إنشاء الـ Token
$token = $user->createToken('my-api-token')->plainTextToken;
return response()->json(['token' => $token]);
}
حماية المسارات (Protecting Routes)
عشان نمنع أي حد مش مسجل دخول من الوصول لبيانات معينة، بنستخدم الـ Middleware اللي اسمه auth:sanctum. روح لملف الـ routes/api.php واكتب الكود ده:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
نصيحة من أخ لمبرمج محترف
يا صديقي، الحماية مش مجرد كود بتكتبه، الحماية "عقلية" (Mindset). استخدم دائماً HTTPS في السيرفر بتاعك، وماتطلعش الـ Tokens في الـ Logs أبداً. اتعلم كمان إزاي تعمل إلغاء للرموز (Token Revocation) لما المستخدم يعمل تسجيل خروج (Logout)، عشان تضمن إن مفيش حد يقدر يستخدم الـ Token القديم. ممارسة التشفير والتأمين هي اللي بتفرق المبرمج الهاوي عن المبرمج المحترف اللي الشركات بتدور عليه.
أتمنى يكون الشرح بسيط وواضح، ولو واجهت أي مشكلة، دايماً اقرأ التوثيق الرسمي (Documentation) بتاع لارافيل، فهو كنز لا يفنى.



