احراز هویت دو مرحلهای در جنگو یکی از بهترین روشها برای افزایش امنیت وبسایتها و برنامههای کاربردی است. این روش کاری میکند که حتی اگر یک مهاجم بتواند به رمز عبور کاربر دسترسی پیدا کند، برای ورود به حساب کاربر نیاز به مرحله دوم تایید هویت خواهد داشت. در اینجا نحوه پیادهسازی 2FA در جنگو را به شما آموزش میدهیم.
سرفصل های مقاله
پیشنیازها
- نصب جنگو: اگر هنوز جنگو را نصب نکردهاید، ابتدا آن را نصب کنید:
pip install django
- نصب کتابخانههای اضافی: برای پشتیبانی از گوشیهای هوشمند برای احراز هویت دو مرحلهای، میتوان از کتابخانههایی نظیر django-otp و django-otp-twilio استفاده کرد. برای نصب آنها:
pip install django-otp pip install twilio
مرحله 1: تنظیم پروژه جنگو
- ایجاد پروژه جدید:
django-admin startproject myproject cd myproject
- ایجاد یک اپ جدید:
python manage.py startapp accounts
- افزودن اپ و کتابخانهها به تنظیمات: فایل settings.py را باز کرده و اپ و کتابخانههای مورد نیاز را اضافه کنید:
INSTALLED_APPS = [ ... 'django_otp', 'django_otp.plugins.otp_totp', 'accounts', ]
- تنظیمات URL: در فایل urls.py اصلی، اپلیکیشن حساب کاربری را شامل کنید:
from django.urls import path, include urlpatterns = [ ... path('accounts/', include('accounts.urls')), ]
مرحله 2: ایجاد مدل و فرم کاربری
- ایجاد مدل برای حساب کاربری: در فایل 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)
- ایجاد فرم برای دریافت شماره تلفن کاربر: در فایل forms.py:
from django import forms from .models import UserProfile class UserProfileForm(forms.ModelForm): class Meta: model = UserProfile fields = ['phone_number']
مرحله 3: تنظیمات احراز هویت دو مرحلهای
- ایجاد نمای ثبتنام: در فایل 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})
- ارسال کد 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, )
- تنظیم نمای تأیید کد: بعد از ثبتنام یا ورود، کدی که به تلفن کاربر ارسال شده است باید تایید شود. در ادامه کد تایید را اضافه کنید.
مرحله 4: جمعبندی و ارزیابی
در نهایت، برای کامل کردن سیستم 2FA، باید صفحات HTML برای ثبتنام و ورود به حساب کاربری ایجاد کنید. علاوه بر این، اطمینان حاصل کنید که کدهای ارسال شده به کاربران کاملا تصادفی و امن هستند.
نتیجه گیری
به همین سادگی شما میتوانید یک سیستم احراز هویت دو مرحلهای در جنگو پیادهسازی کنید. این سیستم به طور قابل توجهی امنیت برنامههای شما را افزایش میدهد و از سوءاستفاده از حسابهای کاربری جلوگیری میکند. برای اطلاعات بیشتر یا یادگیری روشهای پیشرفتهتر 2FA، میتوانید به دورههای آموزشی مربوطه مراجعه کنید که گام به گام شما را در این زمینه راهنمایی خواهد کرد.