Laravel 2 دقيقة للقراءة 612 مشاهدات

كيفية تطبيق المصادقة الثنائية (2FA) في Laravel

أضف طبقة أمان إضافية مع المصادقة الثنائية القائمة على TOTP في تطبيق Laravel الخاص بك.

2FA security

الخطوة 1: تثبيت الحزمة

composer require pragmarx/google2fa-laravel
composer require bacon/bacon-qr-code

php artisan vendor:publish --provider="PragmaRX\Google2FALaravel\ServiceProvider"

الخطوة 2: إضافة الترحيل

Schema::table('users', function (Blueprint $table) {
    $table->string('google2fa_secret')->nullable();
    $table->boolean('two_factor_enabled')->default(false);
});

الخطوة 3: متحكّم تفعيل المصادقة الثنائية

use PragmaRX\Google2FA\Google2FA;

class TwoFactorController extends Controller
{
    public function setup()
    {
        $google2fa = new Google2FA();
        $secret = $google2fa->generateSecretKey();

        session(['2fa_secret' => $secret]);

        $qrCodeUrl = $google2fa->getQRCodeUrl(
            config('app.name'),
            auth()->user()->email,
            $secret
        );

        return view('2fa.setup', compact('qrCodeUrl', 'secret'));
    }

    public function enable(Request $request)
    {
        $request->validate(['code' => 'required|digits:6']);

        $google2fa = new Google2FA();
        $secret = session('2fa_secret');

        if (!$google2fa->verifyKey($secret, $request->code)) {
            return back()->withErrors(['code' => 'Invalid code']);
        }

        auth()->user()->update([
            'google2fa_secret' => encrypt($secret),
            'two_factor_enabled' => true,
        ]);

        session()->forget('2fa_secret');

        return redirect()->route('profile')->with('success', '2FA enabled!');
    }

    public function verify(Request $request)
    {
        $request->validate(['code' => 'required|digits:6']);

        $google2fa = new Google2FA();
        $secret = decrypt(auth()->user()->google2fa_secret);

        if ($google2fa->verifyKey($secret, $request->code)) {
            session(['2fa_verified' => true]);
            return redirect()->intended('dashboard');
        }

        return back()->withErrors(['code' => 'Invalid code']);
    }
}

الخطوة 4: برمجية وسيطة للمصادقة الثنائية

class TwoFactorMiddleware
{
    public function handle($request, Closure $next)
    {
        $user = auth()->user();

        if ($user->two_factor_enabled && !session('2fa_verified')) {
            return redirect()->route('2fa.verify');
        }

        return $next($request);
    }
}

الخطوة 5: واجهة الإعداد

<div>
    <h2>Enable Two-Factor Authentication</h2>

    <p>Scan this QR code with your authenticator app:</p>

    <img src="https://chart.googleapis.com/chart?chs=200x200&chld=M|0&cht=qr&chl={{ urlencode($qrCodeUrl) }}">

    <p>Or enter this code manually: {{ $secret }}</p>

    <form method="POST" action="{{ route('2fa.enable') }}">
        @csrf
        <input type="text" name="code" placeholder="Enter 6-digit code">
        <button type="submit">Verify & Enable</button>
    </form>
</div>
مشاركة هذه المقالة:
ES
كتبه

Edrees Salih

مهندس برمجيات متكامل يتمتع بخبرة 9 سنوات. شغوف ببناء حلول قابلة للتطوير ومشاركة المعرفة مع مجتمع المطورين.

عرض الملف الشخصي

التعليقات (0)

اترك تعليقًا

لن يتم نشر بريدك الإلكتروني.

لا توجد تعليقات بعد. كن أول من يشارك أفكاره!

مقالات ذات صلة

مقالات ذات صلة

هل تحتاج مساعدة في مشروعك؟

احجز استشارة مجانية لمدة 30 دقيقة لمناقشة تحدياتك التقنية واستكشاف الحلول معًا.