احراز هویت دو مرحله‌ای در جنگو یکی از بهترین روش‌ها برای افزایش امنیت وب‌سایت‌ها و برنامه‌های کاربردی است. این روش کاری می‌کند که حتی اگر یک مهاجم بتواند به رمز عبور کاربر دسترسی پیدا کند، برای ورود به حساب کاربر نیاز به مرحله دوم تایید هویت خواهد داشت. در اینجا نحوه پیاده‌سازی 2FA در جنگو را به شما آموزش می‌دهیم.

پیش‌نیازها

  1. نصب جنگو: اگر هنوز جنگو را نصب نکرده‌اید، ابتدا آن را نصب کنید:
    pip install django
    
  2. نصب کتابخانه‌های اضافی: برای پشتیبانی از گوشی‌های هوشمند برای احراز هویت دو مرحله‌ای، می‌توان از کتابخانه‌هایی نظیر django-otp و django-otp-twilio استفاده کرد. برای نصب آن‌ها:
    pip install django-otp
    pip install twilio
    

مرحله 1: تنظیم پروژه جنگو

  1. ایجاد پروژه جدید:
    django-admin startproject myproject
    cd myproject
    
  2. ایجاد یک اپ جدید:
    python manage.py startapp accounts
    
  3. افزودن اپ و کتابخانه‌ها به تنظیمات: فایل settings.py را باز کرده و اپ و کتابخانه‌های مورد نیاز را اضافه کنید:
    INSTALLED_APPS = [
        ...
        'django_otp',
        'django_otp.plugins.otp_totp',
        'accounts',
    ]
    
  4. تنظیمات URL: در فایل urls.py اصلی، اپلیکیشن حساب کاربری را شامل کنید:
    from django.urls import path, include
    
    urlpatterns = [
        ...
        path('accounts/', include('accounts.urls')),
    ]
    

مرحله 2: ایجاد مدل و فرم کاربری

  1. ایجاد مدل برای حساب کاربری: در فایل models.py اپلیکیشن accounts، مدلی برای ذخیره اطلاعات کاربر طراحی کنید:
    from django.contrib.auth.models import User
    from django.db import models
    
    class UserProfile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        phone_number = models.CharField(max_length=15)
        is_verified = models.BooleanField(default=False)
    
    
  2. ایجاد فرم برای دریافت شماره تلفن کاربر: در فایل forms.py:
    from django import forms
    from .models import UserProfile
    
    class UserProfileForm(forms.ModelForm):
        class Meta:
            model = UserProfile
            fields = ['phone_number']
    

مرحله 3: تنظیمات احراز هویت دو مرحله‌ای

  1. ایجاد نمای ثبت‌نام: در فایل views.py:
    from django.shortcuts import render, redirect
    from django.contrib.auth import authenticate, login
    from django_otp.plugins.otp_totp.models import TOTPDevice
    from .forms import UserProfileForm
    
    def register(request):
        if request.method == 'POST':
            form = UserProfileForm(request.POST)
            if form.is_valid():
                user_profile = form.save(commit=False)
                user_profile.user = request.user
                user_profile.save()
                return redirect('login')
        else:
            form = UserProfileForm()
        return render(request, 'register.html', {'form': form})
    
  2. ارسال کد 2FA با استفاده از Twilio:
    from twilio.rest import Client
    
    def send_otp(user):
        client = Client(account_sid, auth_token)
        message = client.messages.create(
            body="Your OTP code is: 123456",  # باید یک کد تصادفی تولید کنید
            from_='+123456789',  # شماره تلفن شما
            to=user.userprofile.phone_number,
        )
    
  3. تنظیم نمای تأیید کد: بعد از ثبت‌نام یا ورود، کدی که به تلفن کاربر ارسال شده است باید تایید شود. در ادامه کد تایید را اضافه کنید.

مرحله 4: جمع‌بندی و ارزیابی

در نهایت، برای کامل کردن سیستم 2FA، باید صفحات HTML برای ثبت‌نام و ورود به حساب کاربری ایجاد کنید. علاوه بر این، اطمینان حاصل کنید که کدهای ارسال شده به کاربران کاملا تصادفی و امن هستند.

نتیجه‌ گیری

به همین سادگی شما می‌توانید یک سیستم احراز هویت دو مرحله‌ای در جنگو پیاده‌سازی کنید. این سیستم به طور قابل توجهی امنیت برنامه‌های شما را افزایش می‌دهد و از سوءاستفاده از حساب‌های کاربری جلوگیری می‌کند. برای اطلاعات بیشتر یا یادگیری روش‌های پیشرفته‌تر 2FA، می‌توانید به دوره‌های آموزشی مربوطه مراجعه کنید که گام به گام شما را در این زمینه راهنمایی خواهد کرد.