পার্ট ১ : Django প্রজেক্ট সেটআপ এবং প্রয়োজনীয় প্যাকেজ ইন্সটল করা
প্রথমে নতুন Django প্রজেক্ট তৈরি করুন:
django-admin startproject myproject
cd myproject
প্রয়োজনীয় প্যাকেজ ইন্সটল করুন:
Django, Django REST Framework, এবং Django-Allauth ইনস্টল করতে নিচের কমান্ডগুলো ব্যবহার করুন:
Django REST Framework দিয়ে django-allauth এর Google Login API বানানোর জন্য dj-rest-auth ব্যবহার করা যেতে পারে। dj-rest-auth হলো django-allauth এর সাথে REST API এর মাধ্যমে authentication এবং social login (যেমন Google, Facebook) সহজেই ব্যবহারের জন্য একটি প্যাকেজ।
pip install django djangorestframework django-allauth dj-rest-auth djangorestframework-simplejwt
settings.py কনফিগারেশন আপডেট করুন:
আপনার প্রজেক্টের settings.py ফাইলে নিম্নলিখিত কনফিগারেশনগুলো যোগ করুন:
INSTALLED_APPS = [
# Django অ্যাপগুলো
'django.contrib.sites',
# Third-party অ্যাপগুলো
'rest_framework',
'rest_framework.authtoken', # <-- Add this line
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google', # Google login
'dj_rest_auth', # dj-rest-auth অ্যাপ
'dj_rest_auth.registration', # Social login registration
'rest_framework_simplejwt', # Simple JWT অ্যাপ
]
# Use a dummy email backend for development
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'allauth.account.middleware.AccountMiddleware', # allauth middleware
]
# Authentication backends
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
SITE_ID = 1
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
REST_USE_JWT = True
Google OAuth2 কনফিগারেশন
Google OAuth2 এর জন্য SOCIALACCOUNT_PROVIDERS কনফিগারেশন:
SOCIALACCOUNT_PROVIDERS = {
'google': {
'SCOPE': [
'profile',
'email',
],
'AUTH_PARAMS': {
'access_type': 'online',
}
}
}
urls.py ফাইলে allauth এর URL অন্তর্ভুক্ত করুন
আপনার প্রজেক্টের মূল urls.py ফাইলে allauth এর URL প্যাটার্ন যুক্ত করুন।
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
from dj_rest_auth.registration.views import SocialLoginView
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
class GoogleLogin(SocialLoginView):
adapter_class = GoogleOAuth2Adapter
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')), # allauth URL
path('api/auth/', include('dj_rest_auth.urls')), # dj-rest-auth URL
path('api/auth/registration/', include('dj_rest_auth.registration.urls')), # registration URL
path('api/auth/google/', GoogleLogin.as_view(), name='google_login'), # Google login API endpoint
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), # JWT টোকেন অবটেইন
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), # JWT টোকেন রিফ্রেশ
]
মাইগ্রেশন রান করুন:
মডেলগুলো তৈরি করতে এবং ডেটাবেস আপডেট করতে নিচের কমান্ড রান করুন:
python manage.py migrate
একটি Superuser তৈরি করুন:
আপনার সাইটে অ্যাডমিন প্যানেল ব্যবহারের জন্য একটি Superuser তৈরি করুন:
python manage.py createsuperuserসাইট কনফিগার করুন:
- Sites মডিউলে গিয়ে example.com সাইটে ক্লিক করুন বা নতুন একটি সাইট তৈরি করুন।
- Domain name এবং Display name এ আপনার লোকাল হোস্ট বা প্রকৃত ডোমেইন দিন, যেমন:
- Domain name:
127.0.0.1(ডেভেলপমেন্টে) অথবা আপনার প্রোডাকশন ডোমেইন - Display name: আপনার সাইটের নাম
- Domain name:
পার্ট ২ :
ধাপ ১: Google API Console-এ একটি প্রজেক্ট তৈরি করুন
- Google API Console-এ যান: Google API Console
- প্রজেক্ট তৈরি করুন:
- ড্যাশবোর্ডে Select a project ক্লিক করুন এবং New Project সিলেক্ট করুন।
- একটি প্রজেক্ট নাম দিন এবং Create ক্লিক করুন।
১। google ক্লাউড কনসোল এর লিংক এ প্রবেশ করি তাহলে নিচের মতো দেখতে পাবো

২। প্রজেক্ট তৈরী করি

ধাপ ২: OAuth Consent Screen সেটআপ করুন
- OAuth consent screen অপশনে যান।
- External নির্বাচন করুন (এটি সাধারণত বাহ্যিক ইউজারদের জন্য হয়) এবং Create ক্লিক করুন।
- App Information পূরণ করুন:
- App name-এ অ্যাপের নাম লিখুন।
- User support email এ আপনার ইমেইল এড্রেস দিন।
- Developer contact information ফিল্ডেও আপনার ইমেইল লিখুন।
- Scopes যোগ না করলেও চলবে এখন, এটি পরে আপডেট করা যাবে।
- Save and Continue ক্লিক করে পরবর্তী ধাপে যান।




ধাপ ৩: OAuth 2.0 Credentials তৈরি করুন
- Credentials পেজে যান।
- Create Credentials এ ক্লিক করুন এবং OAuth client ID নির্বাচন করুন।
- Application type হিসেবে Web application নির্বাচন করুন।
- Authorized redirect URIs এ আপনার ডোমেইনের জন্য Redirect URI যোগ করুন। ডেভেলপমেন্টের সময় এটি সাধারণত এমন হয়:
http://localhost:8000/accounts/google/login/callback/
- Production এ আপনার সঠিক ডোমেইন উল্লেখ করতে হবে।
- Create ক্লিক করলে আপনার জন্য Client ID এবং Client Secret তৈরি হয়ে যাবে।
- Client ID এবং Client Secret সংরক্ষণ করুন, কারণ এগুলো Django অ্যাপ্লিকেশনের সেটআপে লাগবে।
৩। এবার প্রজেক্ট সিলেক্ট করে credentials তৈরী করি এবং Oauth client id তে ক্লিক করি


http://127.0.0.1:8000 for Authorized JavaScript origins
http://127.0.0.1:8000/accounts/google/login/callback/ for Authorized redirect URIs
আমি যখন লোকালহোস্ট এ চালাচ্ছিলাম তখন এরর দিচ্ছিলো কারণ আমার ইউআরএল ছিল http://localhost:8000/ পরে আমি এটা পরিবর্তন করলে ঠিক হয়ে যায়


ধাপ ৪: Google Credentials Django-তে কনফিগার করা
- Django Admin Panel এ যান এবং Sites মডিউলে
localhostবা আপনার প্রজেক্টের ডোমেইন যোগ করুন। - Social Applications এ যান:
- Provider হিসেবে Google সিলেক্ট করুন।
- Client ID এবং Client Secret দিয়ে ফর্মটি পূরণ করুন।
- “Sites” ফিল্ডে আপনার সাইট সিলেক্ট করুন।
Provider: Google নির্বাচন করুন।
Provider ID: এটি ফাঁকা রাখুন। সাধারণত এটি প্রয়োজন হয় না।
Name: একটি সহজে বোঝার মতো নাম দিন, যেমন Google OAuth।
Client id: আপনার JSON ফাইলে থাকা client_id এর মান এখানে বসান:
656075529100-mhre4t4qn5rf6geel6lrb3b952b7h09v.apps.googleusercontent.com
Secret key: আপনার JSON ফাইল থেকে client_secret এর মান এখানে বসান:
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
- Key: এটি ফাঁকা রাখুন, কারণ Google OAuth সেটআপের জন্য এটি সাধারণত প্রয়োজন হয় না।
- Settings: এটি ফাঁকা রাখুন যদি বিশেষ কোনো সেটিংস প্রয়োজন না হয়।
সব কিছু পূরণ করার পর SAVE বাটনে ক্লিক করে সেভ করুন।
ধাপ ৫: Django সার্ভার চালিয়ে টেস্ট করুন
সবকিছু ঠিকভাবে কনফিগার হয়ে থাকলে, আপনার Django অ্যাপে Google Login অপশন কাজ করবে।
এবার আপনি ব্রাউজারে গিয়ে /accounts/login/ URL-এ Google Login অপশন দেখতে পাবেন।
Rest ফ্রেমওয়ার্ক দিয়ে এক্সেস টোকেন পাওয়া এজন্য প্রজেক্ট এর urls.py তে নিচের কোড করি
from django.contrib import admin
from django.urls import path, include
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from .views import google_login_redirect, google_login_callback
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')),
path('api/auth/', include('dj_rest_auth.urls')), # dj-rest-auth URLs
path('api/auth/registration/', include('dj_rest_auth.registration.urls')), # Registration URLs
path('api/auth/google/', google_login_redirect, name='google_login_redirect'), # Google login redirect URL
path('api/auth/google/callback/', google_login_callback, name='google_login_callback'), # Callback for Google login
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), # JWT Token Obtain endpoint
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), # JWT Token Refresh endpoint
]
এবং view তে নিচের কোড করি
from django.shortcuts import redirect
from django.http import JsonResponse
from allauth.socialaccount.models import SocialApp
from allauth.socialaccount.providers.google.provider import GoogleProvider
import requests
from rest_framework_simplejwt.tokens import RefreshToken
from django.contrib.auth.models import User
# Custom Redirect View for Google login
def google_login_redirect(request):
app = SocialApp.objects.get(provider=GoogleProvider.id)
client_id = app.client_id
redirect_uri = "http://localhost:8000/api/auth/google/callback/"
scope = " ".join(["email", "profile"])
auth_url = (
f"https://accounts.google.com/o/oauth2/auth?client_id={client_id}"
f"&redirect_uri={redirect_uri}&scope={scope}&response_type=code"
)
return redirect(auth_url)
# Callback View for Google login
def google_login_callback(request):
authorization_code = request.GET.get('code')
if not authorization_code:
return JsonResponse({"error": "Authorization code not found"}, status=400)
app = SocialApp.objects.get(provider=GoogleProvider.id)
client_id = app.client_id
client_secret = app.secret
redirect_uri = "http://localhost:8000/api/auth/google/callback/"
# Google token endpoint
token_url = "https://oauth2.googleapis.com/token"
# Prepare the data to request the access token
token_data = {
'code': authorization_code,
'client_id': client_id,
'client_secret': client_secret,
'redirect_uri': redirect_uri,
'grant_type': 'authorization_code'
}
# Send the POST request to get the access token
response = requests.post(token_url, data=token_data)
if response.status_code != 200:
return JsonResponse({"error": "Failed to fetch access token", "details": response.json()}, status=500)
token_info = response.json()
access_token = token_info.get('access_token')
refresh_token = token_info.get('refresh_token')
if not access_token:
return JsonResponse({"error": "Access token not found in response"}, status=500)
# Get user info from Google using the access token
user_data = requests.get(
"https://www.googleapis.com/oauth2/v2/userinfo",
headers={"Authorization": f"Bearer {access_token}"}
).json()
# Check if the user exists in the system
user = User.objects.filter(email=user_data['email']).first()
if not user:
# If user doesn't exist, create a new user
user = User.objects.create_user(
username=user_data['email'],
email=user_data['email'],
password=None # Set a default password if needed
)
# Generate JWT token
refresh = RefreshToken.for_user(user)
return JsonResponse({
'access_token': str(refresh.access_token),
'refresh_token': str(refresh),
})
এবং গুগল cloude কনসোল এর রিডাইরেক্ট ইউআরএল এ নিচের মত করি

http://localhost:8000/api/auth/google/callback/এখন লগইন এর জন্য এই ইউআরএল এ যেতে হবে
http://localhost:8000/api/auth/google/