Django এবং Django REST Framework (DRF) প্রজেক্টে JWT (JSON Web Token) Authentication সেটআপ করা এবং ব্যবহারের পদ্ধতি নিয়ে বিশদ ব্যাখ্যা নিচে দেওয়া হলো।
১. JWT ইনস্টল করা ও কনফিগার করা
Django প্রজেক্টে JWT authentication সেটআপ করার জন্য প্রথমে djangorestframework-simplejwt প্যাকেজটি ইনস্টল করতে হবে।
ইনস্টলেশন কমান্ড:
pip install djangorestframework-simplejwt
Settings.py কনফিগারেশন: REST_FRAMEWORK সেকশনে JWTAuthentication ক্লাস যুক্ত করতে হবে।
INSTALLED_APPS = [
...,
'rest_framework',
'rest_framework_simplejwt',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
}
Simple JWT কনফিগারেশন (ঐচ্ছিক):
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS': True,
'BLACKLIST_AFTER_ROTATION': True,
'ALGORITHM': 'HS256',
'SIGNING_KEY': 'your_secret_key',
'AUTH_HEADER_TYPES': ('Bearer',),
}
২. JWT Login ও Token Refresh: লগইন এবং রিফ্রেশ টোকেন ব্যবহারের পদ্ধতি
JWT authentication সিস্টেমে, user-কে login করার জন্য একটি access token এবং একটি refresh token সরবরাহ করা হয়। access token একটি নির্দিষ্ট সময় পর্যন্ত বৈধ থাকে, এবং refresh token ব্যবহার করে একটি নতুন access token জেনারেট করা যায়।
Login Endpoint:
POST /api/token/
JSON ডেটা উদাহরণ (Login রিকোয়েস্ট):
{
"username": "user1",
"password": "securepassword"
}
Response (সফল হলে):
{
"access": "your_access_token_here",
"refresh": "your_refresh_token_here"
}
Token Refresh Endpoint:
POST /api/token/refresh/
JSON ডেটা উদাহরণ (Refresh রিকোয়েস্ট):
{
"refresh": "your_refresh_token_here"
}
Response (সফল হলে):
{
"access": "new_access_token_here"
}
৩. Custom JWT Authentication: কাস্টম ফিল্ডস ব্যবহার করে JWT অথেন্টিকেশন সিস্টেম তৈরি
JWT অথেন্টিকেশন সিস্টেমকে কাস্টমাইজ করে অতিরিক্ত ফিল্ডস যুক্ত করা যেতে পারে। এর জন্য, আপনাকে একটি কাস্টম TokenObtainPairSerializer তৈরি করতে হবে।
Custom Serializer তৈরি করা:
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
# Custom claims যোগ করা হচ্ছে
token['username'] = user.username
token['email'] = user.email
token['is_staff'] = user.is_staff
return token
Custom View তৈরি করা:
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import CustomTokenObtainPairSerializer
class CustomTokenObtainPairView(TokenObtainPairView):
serializer_class = CustomTokenObtainPairSerializer
Urls.py কনফিগারেশন:
from django.urls import path
from .views import CustomTokenObtainPairView
from rest_framework_simplejwt.views import TokenRefreshView
urlpatterns = [
path('api/token/', CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
Custom JWT Validation
কোনো protected API endpoint এ token validate করার জন্য IsAuthenticated permission এবং JWTAuthentication ব্যবহৃত হয়।
Example API View:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
class ProtectedView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
return Response({"message": "This is a secured response for authenticated users."})
Authorization Header: API রিকোয়েস্টে access token পাঠানোর সময়, Authorization header ব্যবহার করতে হবে:
Authorization: Bearer your_access_token_here
সংক্ষেপে
- ইনস্টল ও কনফিগারেশন:
djangorestframework-simplejwtপ্যাকেজ ইন্সটল ও কনফিগার করা। - Login ও Refresh: User login এ access এবং refresh token প্রদান করা।
- Custom JWT: অতিরিক্ত ফিল্ডস সহ JWT কাস্টমাইজ করা।
- Validation: Protected endpoint এ token validate করা।
এভাবে, Django এবং DRF ব্যবহার করে JWT authentication সহজেই সেটআপ ও ব্যবহার করা যায়।