codeteklab

Custom Laravel Authentication with Email Verification (Step by Step Guide)

Ad
Custom Laravel Authentication with Email Verification (Step by Step Guide)

Custom Laravel Authentication with Email Verification (Step by Step Guide)

الكاتب : hamza ougjjou

نشر في : 17-02-2026

التصنيفات :

laravel

تعرف في هذا المقال على كيفية إنشاء نظام مصادقة مخصص في Laravel خطوة بخطوة، يشمل تسجيل المستخدمين، تسجيل الدخول والخروج، إرسال رابط تأكيد البريد الإلكتروني، والتحقق من صحة البيانات باستخدام Requests مخصصة. المقال يحتوي على الأكواد الجاهزة مع شرح تفصيلي لتسهيل عملية التطبيق.
Ad

تجهيز بيئة العمل

أولاً، تأكد من تثبيت Laravel. يمكنك إنشاء مشروع Laravel جديد عن طريق تشغيل الامر التالي


            laravel new laravel-custom-auth
        

او تتبع المراحل في laravel documentation

بعد الانتهاء من تحميل ملفات المشروع نقوم بتعديل ملف ال migration الخاص بجدول users


            ...
            public function up(): void
                {
                    Schema::create('users', function (Blueprint $table) {
                        $table->id(); //المعرف الخاص بكل مستخدم
                        $table->string('name');
                        $table->string('email')->unique();
                        $table->timestamp('email_verified_at')->nullable(); //حقل يستخدم للتأكد من  ادا ثم تأكيد البريد الالكتروني
                        $table->string('password');
                        $table->rememberToken();
                        $table->timestamps();
                    });
            }
            ...
        

عمل migration للجدول


           php artisan migrate
        

تعديل user model

تعديل user model بحيث نسمح له بان يرث من Authenticatable class للسماح له بتنفيد عمليات تسجيل الدخول (authentication) , و ايضا لا تنسى عمل implemtaion لكلاس MustVerifyEmail اللدي سيساعد في ارسال email تأكيد الحساب للمستخدم عند انشاء حساب جديد

ملف User.php

            namespace App\Models;

            use Illuminate\Contracts\Auth\MustVerifyEmail;
            use Illuminate\Database\Eloquent\Factories\HasFactory;
            use Illuminate\Foundation\Auth\User as Authenticatable;
            use Illuminate\Notifications\Notifiable;

            class User extends Authenticatable implements MustVerifyEmail
            {

                use HasFactory, Notifiable;

                protected $fillable = [
                    'name',
                    'email',
                    'password',
                ];

                protected $hidden = [
                    'password',
                    'remember_token',
                ];
            }
         

انشاء AuthController

AuthController هو الملف الدي سيتحكم في جميع العمليات المنطقية الخاصة بانشاء الحساب , تسجيل الدخول , تسجيل الخروج و كدالك ارسال ؤابط تأكيد البريد الالكتروني


            php artisan make:controller auth\AuthController
        

و هدا كود ال AuthController مع شرح كل جزء منه



            namespace App\Http\Controllers\api;
            
            use App\Http\Controllers\Controller;
            use App\Http\Requests\LoginRequest;
            use App\Http\Requests\RegisterRequest;
            use App\Models\User;
            use Illuminate\Http\Request;
            use Illuminate\Support\Facades\Hash;
            use Illuminate\Support\Facades\Auth;
            
            class AuthController extends Controller
            {
                // تحويل المستخدم الى صفحة انشاء الحساب 
                public function register()
                {
                    return view('auth.register');
                }
            
                public function register_store(RegisterRequest $request)
                {
                    $user = User::create([
                        'name' => $request->name,
                        'email' => $request->email,
                        'password' => Hash::make($request->password),
                    ]);
            
                    //تسجيل الدخول للمستخدم
                    Auth::login($user);
            
                    // ارسال رسالة عبر البريد الالكتروني تحتوي على رابط تأكيد الاميل
                    $user->sendEmailVerificationNotification();
            
                    //توجيه المستخدم الي  ملفه الشخصي
                    return redirect()->route('profile')->with('success', 'Registration successful! Welcome.');
                }
            
            
                //تحويل المستخدم الى صفحة تسجيل الدخول
                public function login(Request $request)
                {
                    return view('auth.login');
                }

                public function login_store(LoginRequest $request)
                {
                    // محاولة التحقق من بيانات تسجيل الدخول باستخدام البريد الإلكتروني وكلمة المرور
                    if (Auth::attempt($request->only('email', 'password'))) {
                        // إذا تم تسجيل الدخول بنجاح
                        $request->session()->regenerate(); // تجديد الجلسة لمنع هجمات "تثبيت الجلسات"
            
                        // إعادة توجيه المستخدم إلى الصفحة المطلوبة أو لوحة التحكم
                        return redirect()->route(route: 'profile')->with('success', 'Registration successful! Welcome.');
                    }
            
                    // إذا كانت بيانات الاعتماد خاطئة
                    return back()->withErrors([
                        'email' => 'The provided credentials are incorrect.', // رسالة الخطأ لحقل البريد الإلكتروني
                    ])->onlyInput('email'); // إبقاء حقل البريد الإلكتروني معبأً عند إعادة المحاولة
                }
            
            
                public function logout()
                {
                    //session تسجيل الخروج و حدف 
                    Auth::logout();
            
                    // توجيه المستخدم الى الصفحة الرئيسية
                    return redirect()->route('home')->with('success', 'You have been logged out successfully.');
                }
            
            
            }
        

انشاء ملفات LoginRequest و RegisterRequest للتحقق من البيانات المرسلة من المستخدم قبل حفضها في قاعدة البيانات

ملف RegisterRequest


            php artisan make:request RegisterRequest
            

ملف RegisterRequest ستجده في المسار التالي

App\Http\Requests\RegisterRequest.php

            namespace App\Http\Requests;

            use Illuminate\Foundation\Http\FormRequest;

            class RegisterRequest extends FormRequest
            {
                /**
                * Determine if the user is authorized to make this request.
                */
                public function authorize(): bool
                {
                    return true; // Allow all users to access this request
                }

                /**
                * Get the validation rules that apply to the request.
                */
                //رسائل الاخطاء في حال المستخدم لم يدخل المعلومات بصيغة صحيحة
                public function rules(): array
                {
                    return [
                        'name' => 'required|string|min:2|max:255',
                        'email' => 'required|email|unique:users,email',
                        'password' => 'required|string|min:6',
                        'password_confirmation' => 'required|string|min:6|same:password',
                    ];
                }

                /**
                * Get custom messages for validation errors.
                */
                public function messages(): array
                {
                    return [
                        'name.required' => 'The name field is required.',
                        'email.required' => 'The email field is required.',
                        'email.email' => 'Please provide a valid email address.',
                        'email.unique' => 'This email is already registered.',
                        'password.required' => 'The password field is required.',
                        'password.min' => 'The password must be at least 6 characters long.',
                        'password.confirmed' => 'The password confirmation does not match.',
                    ];
                }
            }

        

ملف LoginRequest


            php artisan make:request LoginRequest
            

ملف LoginRequest ستجده في المسار التالي

App\Http\Requests\LoginRequest.php

                namespace App\Http\Requests;
                
                use Illuminate\Foundation\Http\FormRequest;
                
                class LoginRequest extends FormRequest
                {
                    public function authorize()
                    {
                        return true; // السماح بتنفيذ الطلب لجميع المستخدمين
                    }
                
                    public function rules()
                    {
                        return [
                            'email' => 'required|email', // البريد الإلكتروني يجب أن يكون موجودًا وبصيغة صحيحة
                            'password' => 'required|min:6', // كلمة المرور يجب أن تكون موجودة ولا تقل عن 6 أحرف
                        ];
                    }
                
                    public function messages()
                    {

                        //رسائل الاخطاء في حال المستخدم لم يدخل المعلومات بصيغة صحيحة
                        return [
                            'email.required' => 'Email is required.',
                            'email.email' => 'Please provide a valid email address.',
                            'password.required' => 'Password is required.',
                            'password.min' => 'Password must be at least 6 characters long.',
                        ];
                    }
                }
                

        

إعداد المسارات Routes

routes\web.php

            use App\Http\Controllers\api\AuthController;
            use Illuminate\Support\Facades\Route;
            use Illuminate\Foundation\Auth\EmailVerificationRequest;

            Route::view("/" , "welcome")->name("home");


            Route::get('/login', [AuthController::class , 'login'])->name('login');
            Route::post('/login', [AuthController::class , 'login_store'])->name('login.store');
            Route::get('/register', [AuthController::class , 'register'])->name('register');
            Route::post('/register', [AuthController::class , 'register_store'])->name('register.store');
            Route::post('/logout', [AuthController::class , 'logout'])->name('logout')->middleware('auth');;


            Route::view('/profile', "auth.profile")->name('profile')->middleware('auth');;
            // Email Verification Routes
            Route::view('/email/verify', "auth.verify-email" )->middleware('auth')->name('verification.notice');

            Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
            $request->fulfill(); // Mark the user's email as verified
            return redirect('/profile'); // Redirect after verification
            })->middleware(['auth', 'signed'])->name('verification.verify');

            Route::post('/email/verification-notification', function (Illuminate\Http\Request $request) {
            $request->user()->sendEmailVerificationNotification(); // Resend the verification email
            return back()->with('message', 'Verification email sent!');
            })->middleware(['auth', 'throttle:6,1'])->name('verification.resend');

        



ملفات التصميم (views) resources\views

screen shot to views files in laravel

جميع ملفات التصميم مرفقة مع هدا المقال يمكنك تحميلها من هنا



ان كانت لديك اي استفسار اتركها في خانة التعليقات او تواصل معنا

التعليقات

avatar lmYbQXhSccVaXepZCQJvAl

3 months ago

WvjzmQOFQvKaBiHwjhWKEUU

avatar TWhiiKzPNyryTQhoTBpkP

3 months ago

McLIUjUvYUVmIZkXdBEh

Ad
Ad