কেন সাবডোমেন লগইন জ্যাঙ্গো-টেন্যান্টদের মধ্যে বিরতি: একটি বাস্তব-বিশ্ব ধাঁধা
একটি মাল্টি-টেন্যান্ট জ্যাঙ্গো অ্যাপ্লিকেশান তৈরি করার কল্পনা করুন যেখানে প্রতিটি সাবডোমেন একটি ভিন্ন ভাড়াটে পরিবেশন করে, নির্বিঘ্নে ব্যবহারকারীর প্রমাণীকরণকে একীভূত করে। সবকিছু নিখুঁত বলে মনে হচ্ছে - যতক্ষণ না একটি সাবডোমেনে লগইন পৃষ্ঠাটি একটি ভয়ঙ্কর নিক্ষেপ করে৷ . আপনি আপনার মাথা আঁচড়, আশ্চর্য কেন লগইন ত্রুটিহীনভাবে কাজ করে, কিন্তু সাবডোমেন লগইন করে না। 🤔
এই সমস্যাটি হতাশাজনক কারণ এটি একটি প্যারাডক্সের মতো অনুভব করে: সিস্টেমটি স্পষ্টভাবে ব্যবহারকারীদের চিনতে পারে যেহেতু আপনি অ্যাডমিন প্যানেলে লগ ইন করতে পারেন৷ একবার লগ ইন করলে, আপনি ভাড়াটে-নির্দিষ্ট পৃষ্ঠাগুলি অ্যাক্সেস করতে পারেন এবং এমনকি সফলভাবে ফর্ম জমা দিতে পারেন। তবুও, আপনি যখন লগইন পৃষ্ঠায় আঘাত করেন, তখন একটি ত্রুটি দেখা দেয়: হুড অধীনে সত্যিই কি হচ্ছে?
আমাকে একটি সম্পর্কিত উদাহরণ শেয়ার করা যাক. এটি একটি বাড়ির দুটি দরজা থাকার মতো - একটি অতিথিদের জন্য (আপনার প্রধান ডোমেন) এবং একটি পরিবারের জন্য (সাবডোমেন)৷ অতিথি দরজা ঠিকঠাক কাজ করে, কিন্তু পরিবারের দরজা জ্যাম হয়ে যায়। আপনি জানেন কীগুলি সঠিক, কিন্তু লক মেকানিজমের সাথে আরও গভীর কিছু ভুল - যেমন ডাটাবেস স্কিমা কোয়েরিতে একটি অপ্রত্যাশিত অমিল।
জ্যাঙ্গো রেস্ট ফ্রেমওয়ার্ক কীভাবে হয় তার মধ্যেই সমস্যার মূল নিহিত সাথে যোগাযোগ করে লাইব্রেরি বিশেষত, টোকেনগুলির বিরুদ্ধে জিজ্ঞাসা করা হয় ভাড়াটে স্কিমার পরিবর্তে, যার ফলে a বিদেশী কী লঙ্ঘন ত্রুটি আসুন এই সমস্যায় ডুবে যাই, কারণটি উদঘাটন করি এবং আপনার সমস্ত সাবডোমেনের জন্য লগইন দরজা ঠিক করি! 🔧
আদেশ | ব্যবহারের উদাহরণ |
---|---|
schema_context() | মাল্টি-টেন্যান্ট জ্যাঙ্গো সেটআপে স্কিমাগুলির মধ্যে স্যুইচ করার অনুমতি দেয়। উদাহরণ: schema_context('tenant_name') সহ: নির্দিষ্ট টেন্যান্টের ডাটাবেস স্কিমায় অপারেশন চালানো হয়েছে তা নিশ্চিত করে। |
authenticate() | একজন ব্যবহারকারীকে তাদের শংসাপত্র ব্যবহার করে প্রমাণীকরণ করে। উদাহরণ: user=authenticate(request, username=username, password=password) প্রদত্ত শংসাপত্রগুলি বৈধ কিনা তা পরীক্ষা করে। |
Token.objects.get_or_create() | একটি ব্যবহারকারীর জন্য একটি বিদ্যমান টোকেন পুনরুদ্ধার করে বা এটি বিদ্যমান না থাকলে একটি তৈরি করে৷ উদাহরণ: টোকেন, তৈরি = Token.objects.get_or_create(user=user)। |
csrf_exempt | একটি নির্দিষ্ট দৃশ্যের জন্য CSRF সুরক্ষা অক্ষম করে৷ উদাহরণ: বাহ্যিক বা অ-ব্রাউজার API অনুরোধগুলি পরিচালনা করার সময় @csrf_exempt ব্যবহার করা হয়। |
connection.tenant.schema_name | একটি জ্যাঙ্গো মাল্টি-টেন্যান্ট অ্যাপে বর্তমান ভাড়াটেদের স্কিমার নাম পুনরুদ্ধার করে। উদাহরণ: tenant_schema_name = connection.tenant.schema_name। |
JsonResponse() | HTTP প্রতিক্রিয়া হিসাবে JSON-ফরম্যাট করা ডেটা প্রদান করে। উদাহরণ: JsonResponse ({"status": "success", "token": token.key}) ফেরত দিন। |
APIClient() | একটি জ্যাঙ্গো রেস্ট ফ্রেমওয়ার্ক টেস্টিং ক্লায়েন্ট যা পরীক্ষায় HTTP অনুরোধ অনুকরণ করতে দেয়। উদাহরণ: self.client = APIClient()। |
localStorage.setItem() | ব্রাউজারের স্থানীয় সঞ্চয়স্থানে একটি মূল-মান জোড়া সংরক্ষণ করে। উদাহরণ: localStorage.setItem('token', data.token) ভবিষ্যতে ব্যবহারের জন্য টোকেন সংরক্ষণ করে। |
Swal.fire() | SweetAlert2 লাইব্রেরি ব্যবহার করে সতর্কতা পপআপ প্রদর্শন করে। উদাহরণ: Swal.fire({icon: 'error', title: 'Login Failed'}) একটি স্টাইল করা ত্রুটি বার্তা দেখায়। |
TestCase | জ্যাঙ্গোতে ইউনিট পরীক্ষা লিখতে ব্যবহৃত হয়। উদাহরণ: ক্লাস TenantLoginTest(TestCase): স্কিমা-নির্দিষ্ট লগইন পরীক্ষার জন্য একটি পরীক্ষা ক্লাস তৈরি করে। |
Django-ভাড়াটেদের মধ্যে ভাড়াটে-নির্দিষ্ট প্রমাণীকরণ আয়ত্ত করা
উপরে প্রদত্ত স্ক্রিপ্টগুলি মাল্টি-টেন্যান্ট জ্যাঙ্গো অ্যাপ্লিকেশনগুলিতে একটি জটিল সমস্যা সমাধান করে যেখানে টোকেনগুলি থেকে জিজ্ঞাসা করা হয় উপযুক্ত ভাড়াটে স্কিমার পরিবর্তে। এই আচরণটি ঘটে কারণ Django Rest Framework (DRF) টোকেন মডেলগুলির সাথে ইন্টারঅ্যাক্ট করার সময় স্বয়ংক্রিয়ভাবে স্কিমা পরিবর্তন করে না। এই সমাধানের জন্য, আমরা লিভারেজ লাইব্রেরি পদ্ধতি, আমাদের সঠিক ভাড়াটেদের স্কিমার মধ্যে ডাটাবেস প্রশ্নগুলি স্পষ্টভাবে চালানোর অনুমতি দেয়। এটি নিশ্চিত করে যে ব্যবহারকারীর প্রমাণীকরণ এবং টোকেন পুনরুদ্ধার প্রতিটি ভাড়াটে জন্য নির্বিঘ্নে কাজ করে, প্রাথমিক ডোমেন বা সাবডোমেনের মাধ্যমে অ্যাক্সেস করা হোক না কেন। এই সমন্বয় ছাড়া, ForeignKeyViolation ত্রুটি ঘটে কারণ সিস্টেমটি ভুল স্কিমাতে ব্যবহারকারীর রেকর্ড খোঁজে।
`ডুয়াল_লগইন_ভিউ` ফাংশনটি প্রদর্শন করে যে কীভাবে ব্যবহারকারীদের প্রমাণীকরণ করা যায় এবং ভাড়াটে স্কিমার সাথে ডাটাবেস সংযোগ পয়েন্ট নিশ্চিত করা যায়। প্রথমত, এটি অনুরোধ পেলোড থেকে ব্যবহারকারীর নাম এবং পাসওয়ার্ড বের করে। তারপর, 'প্রমাণিত করুন' পদ্ধতি ব্যবহার করে, এটি শংসাপত্রগুলিকে বৈধ করে। সফল হলে, এটি ব্যবহারকারীকে লগ ইন করে এবং DRF এর `Token.objects.get_or_create()` পদ্ধতি ব্যবহার করে একটি টোকেন তৈরি করে। এই ক্যোয়ারীটি সঠিক স্কিমাকে লক্ষ্য করে তা নিশ্চিত করতে, `স্কিমা_প্রসঙ্গ` ফাংশন যুক্তিটিকে মোড়ানো করে, ডাটাবেস প্রসঙ্গকে সক্রিয় টেন্যান্ট স্কিমাতে স্যুইচ করে। এটি গ্যারান্টি দেয় যে সিস্টেম সঠিক ব্যবহারকারী এবং টোকেন রেকর্ডগুলি সনাক্ত করতে পারে, স্কিমা অমিল ত্রুটি দূর করে৷
`TenantAwareLoginAPIView` ক্লাস একটি মডুলার পদ্ধতির জন্য জ্যাঙ্গো রেস্ট ফ্রেমওয়ার্কের APIView গ্রহণ করে সমাধানকে উন্নত করে। এটি ব্যবহারকারীর শংসাপত্র সম্বলিত POST অনুরোধগুলি গ্রহণ করে, 'প্রমাণিত করুন' ব্যবহার করে তাদের যাচাই করে এবং প্রমাণপত্রগুলি সঠিক হলে একটি টোকেন তৈরি করে৷ গুরুত্বপূর্ণভাবে, সঠিক ভাড়াটে স্কিমার মধ্যে সমস্ত ক্রিয়াকলাপ চালানোর জন্য এটি `schema_context` ব্যবহার করে। এই ক্লাস-ভিত্তিক ভিউ আধুনিক API বাস্তবায়নের জন্য আদর্শ কারণ এটি ত্রুটি পরিচালনাকে কেন্দ্রীভূত করে এবং পরিষ্কার, কাঠামোগত প্রতিক্রিয়া প্রদান করে। উদাহরণস্বরূপ, একটি JSON টোকেন ফেরত দেওয়া নিশ্চিত করে যে ফ্রন্টএন্ড এটিকে স্থানীয় স্টোরেজে সংরক্ষণ করতে পারে এবং পরবর্তী প্রমাণীকৃত অনুরোধের জন্য এটি ব্যবহার করতে পারে।
ফ্রন্টএন্ডে, জাভাস্ক্রিপ্ট ফর্ম জমা দেওয়ার স্ক্রিপ্ট লগইন এন্ডপয়েন্টে সুরক্ষিত এবং কাঠামোগত অনুরোধ করতে একটি মুখ্য ভূমিকা পালন করে। এটি ডিফল্ট ফর্ম আচরণকে বাধা দেয়, ইনপুট ক্ষেত্রগুলিকে যাচাই করে এবং একটি ফেচ API অনুরোধের মাধ্যমে CSRF টোকেনের সাথে শংসাপত্র পাঠায়। একটি সফল প্রতিক্রিয়া পাওয়ার পর, টোকেনটি `localStorage`-এ সংরক্ষণ করা হয় এবং ব্যবহারকারীকে পুনঃনির্দেশিত করা হয়। যদি সার্ভার একটি ত্রুটি ফেরত দেয়, SweetAlert2 লাইব্রেরি একটি বন্ধুত্বপূর্ণ সতর্কতা বার্তা প্রদর্শন করে। এটি ব্যবহারকারীর অভিজ্ঞতাকে মসৃণ করে তোলে এবং সঠিক ত্রুটি প্রতিক্রিয়া নিশ্চিত করে। উদাহরণস্বরূপ, একটি ভাড়াটে সাবডোমেন অ্যাক্সেস করার সময়, বৈধ শংসাপত্র সহ লগ ইন করা ব্যবহারকারী অবিলম্বে একটি সফল বার্তা দেখতে পাবে এবং অ্যাপ্লিকেশন ড্যাশবোর্ডে পুনঃনির্দেশিত হবে। 🔒
অপ্টিমাইজড স্কিমা কোয়েরি সহ জ্যাঙ্গো-টেন্যান্টদের সাবডোমেন লগইন সমস্যাগুলি পরিচালনা করা
স্পষ্ট স্কিমা নির্বাচন এবং ত্রুটি পরিচালনা সহ জ্যাঙ্গো ওআরএম ব্যবহার করে ব্যাকএন্ড সমাধান।
# Import necessary libraries
from django.db import connection
from rest_framework.authtoken.models import Token
from django.contrib.auth import authenticate, login
from django.http import JsonResponse
from django_tenants.utils import schema_context
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def dual_login_view(request):
"""Handle login for multi-tenant subdomains with correct schema."""
if request.method == "POST":
username = request.POST.get("login")
password = request.POST.get("password")
tenant_schema_name = connection.tenant.schema_name
try:
# Switch to the correct tenant schema
with schema_context(tenant_schema_name):
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# Generate or retrieve token
token, created = Token.objects.get_or_create(user=user)
return JsonResponse({"status": "success", "token": token.key})
else:
return JsonResponse({"status": "error", "message": "Invalid credentials"}, status=400)
except Exception as e:
return JsonResponse({"status": "error", "message": str(e)}, status=500)
return JsonResponse({"status": "error", "message": "Invalid request method"}, status=405)
ভাড়াটে-সচেতন স্কিমা ব্যবহার করে স্পষ্ট টোকেন ব্যবস্থাপনা
মাল্টি-টেন্যান্ট আর্কিটেকচারে লগইন করার জন্য একটি মডুলারাইজড এবং পুনঃব্যবহারযোগ্য জ্যাঙ্গো API ভিউ।
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth import authenticate
from rest_framework.authtoken.models import Token
from django_tenants.utils import schema_context
class TenantAwareLoginAPIView(APIView):
"""Login endpoint that ensures tenant-aware schema handling."""
def post(self, request):
username = request.data.get("username")
password = request.data.get("password")
tenant_schema_name = request.tenant.schema_name
if not username or not password:
return Response({"error": "Username and password required"}, status=status.HTTP_400_BAD_REQUEST)
try:
with schema_context(tenant_schema_name):
user = authenticate(request, username=username, password=password)
if user is None:
return Response({"error": "Invalid credentials"}, status=status.HTTP_401_UNAUTHORIZED)
# Generate or retrieve token for the user
token, created = Token.objects.get_or_create(user=user)
return Response({"token": f"Token {token.key}"}, status=status.HTTP_200_OK)
except Exception as e:
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
সাবডোমেন লগইন অনুরোধ পরিচালনার জন্য ফ্রন্টএন্ড স্ক্রিপ্ট
ভাড়াটে সাবডোমেনের জন্য ফর্ম জমা এবং প্রক্রিয়া টোকেন-ভিত্তিক লগইন পরিচালনা করার জন্য জাভাস্ক্রিপ্ট সমাধান।
<script>
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault();
let form = event.target;
let formData = new FormData(form);
fetch("{% url 'tenant_aware_login' %}", {
method: 'POST',
body: JSON.stringify(Object.fromEntries(formData)),
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': formData.get('csrfmiddlewaretoken')
}
})
.then(response => {
if (!response.ok) throw new Error('Server Error');
return response.json();
})
.then(data => {
if (data.token) {
localStorage.setItem('token', data.token);
window.location.href = '/';
} else {
Swal.fire({
icon: 'error',
title: 'Login Failed',
text: data.error || 'Invalid credentials'
});
}
})
.catch(error => {
console.error('Error:', error);
});
});
</script>
স্কিমা-সচেতন টোকেন প্রমাণীকরণ যাচাই করতে ইউনিট পরীক্ষা
এপিআই সঠিকভাবে স্কিমা সুইচিং পরিচালনা করে তা নিশ্চিত করতে পাইথনে ইউনিট পরীক্ষা করুন।
from django.test import TestCase
from rest_framework.test import APIClient
from django_tenants.utils import schema_context
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
class TenantLoginTest(TestCase):
def setUp(self):
self.client = APIClient()
with schema_context('test_tenant'): # Switch to tenant schema
self.user = User.objects.create_user(username='testuser', password='testpass')
def test_successful_login(self):
with schema_context('test_tenant'):
response = self.client.post('/api/login/', {
'username': 'testuser',
'password': 'testpass'
})
self.assertEqual(response.status_code, 200)
self.assertIn('token', response.json())
def test_invalid_login(self):
with schema_context('test_tenant'):
response = self.client.post('/api/login/', {
'username': 'wronguser',
'password': 'wrongpass'
})
self.assertEqual(response.status_code, 401)
self.assertIn('error', response.json())
মাল্টি-টেন্যান্ট জ্যাঙ্গো অ্যাপগুলিতে ভাড়াটে-নির্দিষ্ট টোকেন প্রশ্নের ভূমিকা বোঝা
একটি প্রধান দিক ডাটাবেস ক্রিয়াকলাপগুলি সর্বদা সঠিক ভাড়াটে স্কিমার মধ্যে ঘটে তা নিশ্চিত করছে। এই ক্ষেত্রে সমস্যাটি ঘটছে কারণ জ্যাঙ্গোর ডিফল্ট আচরণ একটি একক ভাগ করা স্কিমা ধরে নেয়, যার ফলে ত্রুটি দেখা দেয় যখন টোকেন বা ব্যবহারকারীদের খুঁজে পাওয়া যায় না . এর মত টুল লিভারেজ করে থেকে ফাংশন জ্যাঙ্গো-ভাড়াটেরা লাইব্রেরি, আমরা স্পষ্টভাবে ভাড়াটে-নির্দিষ্ট প্রশ্নগুলি সম্পাদন করতে স্কিমাগুলির মধ্যে স্যুইচ করি। এটি নিশ্চিত করে যে ব্যবহারকারী এবং টোকেনগুলির জন্য প্রমাণীকরণ প্রশ্নগুলি সঠিক স্কিমার দিকে নির্দেশিত হয়েছে৷
আরেকটি মূল বিবরণ প্রায়ই উপেক্ষা করা হয় কিভাবে পরিচালনা করে ডিফল্টরূপে, এটি সক্রিয় ডাটাবেস স্কিমাতে ব্যবহারকারীর রেকর্ডের সন্ধান করে। বর্তমান স্কিমা ভুল হলে, ক্যোয়ারী ব্যর্থ হয় a দিয়ে ত্রুটি এটি ঠিক করার জন্য, আমরা নিশ্চিত করি যে টোকেন মডেলের সাথে জড়িত যেকোন প্রশ্ন একটি সঠিক ভাড়াটে স্কিমা প্রসঙ্গে ঘটবে। এই সমন্বয় ছাড়া, এমনকি বৈধ ব্যবহারকারীরাও প্রমাণীকরণ করতে ব্যর্থ হবে কারণ ব্যবহারকারীর আইডি ডিফল্ট স্কিমাতে অবস্থিত হতে পারে না।
উপরন্তু, ফ্রন্ট-এন্ড কোড এই ব্যাকএন্ড প্রক্রিয়াগুলির সাথে কার্যকরভাবে যোগাযোগ করার ক্ষেত্রে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। নিশ্চিত করা হচ্ছে এপিআই পাঠাচ্ছে এবং JSON প্রতিক্রিয়াগুলি সঠিকভাবে পরিচালনা করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, ট্রাই-ক্যাচ ব্লকগুলিতে API কলগুলি মোড়ানো এবং ব্যবহারকারী-বান্ধব লাইব্রেরিগুলি ব্যবহার করে ত্রুটিগুলি পরিচালনা করা ব্যবহারযোগ্যতা উন্নত করে। এই বর্ধিতকরণগুলি নিশ্চিত করে যে লগইন প্রবাহ নির্বিঘ্ন থাকে, এমনকি সাবডোমেনের মধ্যে স্যুইচ করার সময় বা স্কিমা-নির্দিষ্ট ত্রুটির সম্মুখীন হওয়ার সময়ও। উদাহরণ স্বরূপ, একটি SaaS প্ল্যাটফর্ম কল্পনা করুন যেখানে প্রতিটি কোম্পানি (ভাড়াটে) একটি সাবডোমেন ব্যবহার করে—ফিক্সিং স্কিমা কনটেক্সট প্রত্যেক কর্মচারীকে বিঘ্ন ছাড়াই মসৃণভাবে লগ ইন করা নিশ্চিত করে। 🚀
- কি কারণে ক লগইন করার সময়?
- ত্রুটি ঘটে কারণ ভুল স্কিমা অনুসন্ধান করে, ব্যবহারকারীর রেকর্ড খোঁজার সময় একটি অমিল সৃষ্টি করে।
- আমি কিভাবে নিশ্চিত করব যে টোকেন প্রশ্ন সঠিক ভাড়াটে স্কিমার দিকে নির্দেশ করে?
- ব্যবহার করুন থেকে লাইব্রেরি ক্যোয়ারী এক্সিকিউশন মোড়ানো এবং সঠিক স্কিমাতে স্যুইচ করুন।
- কেন অ্যাডমিন প্যানেল লগইন কাজ করে কিন্তু ব্যবহারকারী লগইন ব্যর্থ হয়?
- জ্যাঙ্গো অ্যাডমিন স্বয়ংক্রিয়ভাবে স্কিমা প্রসঙ্গগুলিকে সামঞ্জস্য করে, তবে কাস্টম ভিউ ব্যবহার করে বা স্পষ্টভাবে কনফিগার না করা পর্যন্ত নাও হতে পারে।
- আমি কিভাবে ফ্রন্টএন্ডে একটি লগইন টোকেন পুনরুদ্ধার ও সংরক্ষণ করব?
- শংসাপত্র পাঠাতে ফেচ API ব্যবহার করুন, তারপর ব্যবহার করে প্রতিক্রিয়া টোকেন সংরক্ষণ করুন ক্রমাগত প্রমাণীকরণের জন্য।
- ব্যর্থ লগইনগুলির জন্য আমি কীভাবে আরও ভাল ত্রুটি বার্তা প্রদর্শন করতে পারি?
- লাইব্রেরি ব্যবহার করে ফ্রন্টএন্ড সতর্কতা প্রয়োগ করুন ভুল শংসাপত্র বা সার্ভার সমস্যার ব্যবহারকারীদের অবহিত করতে।
জ্যাঙ্গো মাল্টি-টেন্যান্ট অ্যাপে লগইন ব্যর্থতার সমাধান করার জন্য নিশ্চিত করা প্রয়োজন যে সমস্ত ডাটাবেস কোয়েরি সঠিক স্কিমায় কাজ করে। স্কিমা কনটেক্সটের মতো টুলগুলিকে স্পষ্টভাবে ব্যবহার করে, আমরা গ্যারান্টি দিতে পারি যে ব্যবহারকারীর টোকেনগুলি সঠিক ভাড়াটে ডাটাবেস থেকে আনা হয়েছে, স্কিমা দ্বন্দ্ব এড়ানো।
একটি SaaS প্ল্যাটফর্মে কাজ করার কল্পনা করুন যেখানে ব্যবহারকারীরা শুধুমাত্র সাবডোমেনে লগইন ব্যর্থতার সম্মুখীন হন। সঠিক স্কিমা স্যুইচিংয়ের সাথে, এই সমস্যাগুলি সমাধান করা হয়, নির্বিঘ্ন প্রমাণীকরণ নিশ্চিত করে। এই ফিক্স গ্রহণ শুধুমাত্র উন্নতি না তবে প্রতিটি ভাড়াটেদের জন্য নিরাপদ, দক্ষ ডেটা অ্যাক্সেসের নিশ্চয়তা দেয়। 🔧
- উপর বিস্তারিত ডকুমেন্টেশন লাইব্রেরি, মাল্টি-টেন্যান্ট অ্যাপ্লিকেশনে স্কিমা ম্যানেজমেন্ট ব্যাখ্যা করে। এখানে উপলব্ধ: জ্যাঙ্গো-টেন্যান্ট ডকুমেন্টেশন .
- টোকেন প্রমাণীকরণে অফিসিয়াল জ্যাঙ্গো রেস্ট ফ্রেমওয়ার্ক (DRF) ডকুমেন্টেশন। এখানে আরও জানুন: ডিআরএফ টোকেন প্রমাণীকরণ .
- মাল্টি-টেন্যান্ট পরিবেশে schema_context ব্যবহার করার বিষয়ে ব্যাপক নির্দেশিকা। এখানে পাওয়া গেছে: GitHub - জ্যাঙ্গো ভাড়াটে .
- জ্যাঙ্গো অ্যাপ্লিকেশনগুলিতে CSRF টোকেনগুলি পরিচালনা করার অন্তর্দৃষ্টি: জ্যাঙ্গো সিএসআরএফ ডকুমেন্টেশন .
- ব্যবহারকারীর প্রমাণীকরণ সহ মাল্টি-টেন্যান্ট SaaS প্ল্যাটফর্ম ডিজাইন করার জন্য সর্বোত্তম অনুশীলন: SaaS পেগাসাস মাল্টি-টেনেন্সি গাইড .