۰
استفاده از JWT Authentication در Django REST Framework (DRF) با کتابخانه Simple-JWT یکی از روشهای محبوب برای امنسازی APIها است. Simple-JWT یک کتابخانهی ساده و کاربردی برای پیادهسازی احراز هویت JWT در اپلیکیشنهای Django فراهم میکند. بیایید گام به گام نحوهی راهاندازی JWT Authentication با Simple-JWT در DRF را مرور کنیم، همراه با یک مثال عملی.
ابتدا Django، Django REST Framework و Simple-JWT را نصب کنید:
1pip install django djangorestframework djangorestframework_simplejwt
اگر پروژهای ندارید، یک پروژه جدید ایجاد کنید:
1django-admin startproject <myproject> 2cd myproject
جایگزین <myproject> نام دلخواه پروژهی خود را قرار دهید. این دستور پوشهای با آن نام ایجاد میکند که شامل فایلها و دایرکتوریهای پایه پروژه است. ساختار پروژه ممکن است اینگونه باشد:
1myproject/ 2├── myproject/ 3│ ├── __init__.py 4│ ├── settings.py 5│ ├── urls.py 6│ ├── wsgi.py 7│ └── asgi.py 8└── manage.py
یک اپ جدید بسازید:
1python manage.py startapp <myapp>
جایگزین <myapp> نام دلخواه اپ خود را قرار دهید. اکنون ساختار پروژه شما ممکن است اینگونه شود:
1myproject/ 2├── myproject/ 3│ ├── __init__.py 4│ ├── settings.py 5│ ├── urls.py 6│ ├── wsgi.py 7│ └── asgi.py 8├── myapp/ 9│ ├── __init__.py 10│ ├── admin.py 11│ ├── apps.py 12│ ├── migrations/ 13│ │ └── __init__.py 14│ ├── models.py 15│ ├── tests.py 16│ ├── urls.py 17│ └── views.py 18└── manage.py
در فایل settings.py پروژه، نامهای rest_framework و rest_framework_simplejwt را به INSTALLED_APPS اضافه کنید:
1INSTALLED_APPS = [ 2 # سایر اپهای پیشفرض 3 4 'rest_framework', 5 'rest_framework_simplejwt', 6 7 'myapp', # نام اپ خود را وارد کنید 8]
در همان فایل settings.py تنظیمات مربوط به Simple-JWT را اضافه کنید. کد پایه به شکل زیر است:
1# settings.py 2from datetime import timedelta # در ابتدای فایل import کنید 3 4REST_FRAMEWORK = { 5 'DEFAULT_PERMISSION_CLASSES': ( 6 'rest_framework.permissions.IsAuthenticated', 7 ), 8 'DEFAULT_AUTHENTICATION_CLASSES': ( 9 'rest_framework_simplejwt.authentication.JWTAuthentication', 10 ), 11} 12 13SIMPLE_JWT = { 14 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), 15 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), 16 'SLIDING_TOKEN_LIFETIME': timedelta(days=30), 17 'SLIDING_TOKEN_REFRESH_LIFETIME_LATE_USER': timedelta(days=1), 18 'SLIDING_TOKEN_LIFETIME_LATE_USER': timedelta(days=30), 19}
در urls.py پروژه، آدرسهای مربوط به دریافت و رفرش توکنهای JWT را اضافه کنید:
1from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView 2from django.contrib import admin 3from django.urls import path, include 4 5urlpatterns = [ 6 path('admin/', admin.site.urls), 7 path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), 8 path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), 9 path('', include('myapp.urls')), # آدرسهای اپ خود را وارد کنید 10]
در myapp/views.py، نمای API که نیازمند احراز هویت است را تعریف کنید:
1from rest_framework.views import APIView 2from rest_framework.response import Response 3from rest_framework.permissions import IsAuthenticated 4from rest_framework_simplejwt.authentication import JWTAuthentication 5 6class Home(APIView): 7 authentication_classes = [JWTAuthentication] 8 permission_classes = [IsAuthenticated] 9 10 def get(self, request): 11 content = {'message': 'Hello, World!'} 12 return Response(content)
ابتدا یک فایل urls.py در پوشه myapp ایجاد کنید. سپس آدرسها را در آن تعریف کنید:
1touch myapp/urls.py
محتوای فایل myapp/urls.py:
1from django.urls import path 2from .views import Home 3 4urlpatterns = [ 5 path('', Home.as_view()), 6]
برای اعمال تغییرات دیتابیس، دستور زیر را اجرا کنید:
1python manage.py migrate
یک سوپریوزر بسازید و سرور را اجرا کنید:
1python manage.py createsuperuser 2python manage.py runserver
اکنون میتوانید با استفاده از ابزارهایی مانند Postman، API را تست کنید. برای دریافت توکن، به آدرس زیر درخواست POST بدهید (مثلاً آدرس لوکال):
1http://127.0.0.1:8000/api/token/
و اطلاعات معتبر کاربری (username و password) را ارسال کنید.
نمونه تصویری ارسال درخواست و دریافت Token:
سپس توکن دریافتی (access token) را در هدر درخواستها به صورت Authorization با نوع Bearer Token به انتهای آدرسهای احراز هویت شده اضافه کنید، مثلاً:
1http://127.0.0.1:8000/
نمونه تصویر تنظیم هدر Authorization در Postman:
حالا شما احراز هویت JWT را در Django REST Framework با استفاده از Simple-JWT راهاندازی کردهاید. این روش یک مکانیزم امن برای تایید هویت کاربران و دسترسی به منابع محافظتشده در API را ارائه میدهد. فراموش نکنید مدیریت انقضا و رفرش توکنها را در سمت کلاینت بهدرستی اجرا کنید.
برای جزئیات بیشتر میتوانید مستندات رسمی Django Simple-JWT را مطالعه کنید: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/
و همچنین این ریپازیتوری گیتهاب پروژه: GitHub - Django REST APIs با JWT Authentication
اگر نکتهای برای بهبود یا اصلاح دیدید خوشحال میشوم در بخش نظرات بشنوم.
اگر این مطلب برایتان مفید بود، لطفاً دکمه 👏 را بزنید تا دیگران هم استفاده کنند.
همچنین میتوانید مرا در این پلتفرمها دنبال کنید:
GitHub | daily.dev | LinkedIn | YouTube
مطالب Django (۳۸ مقاله)
مطالب Python (۱۳ مقاله)
۰
کد با می متعهد است که بالاترین سطح کیفی آموزش را در اختیار شما بگذارد. هدف به اشتراک گذاشتن دانش فناوری اطلاعات و توسعه نرم افزار در بالاترین سطح ممکن برای درستیابی به جامعه ای توانمند و قدرتمند است. ما باور داریم هر کسی میتواند با استمرار در یادگیری برنامه نویسی چالش های خود و جهان پیرامون خود را بر طرف کند و به موفقیت های چشم گیر برسد. با ما در این مسیر همراه باشید. کد با می اجتماع حرفه ای برنامه نویسان ایرانی.