from django.shortcuts import redirect from google.oauth2 import id_token from django.conf import settings from django.urls import reverse_lazy import requests from google.auth.transport import requests as google_requests def login(request): # Redirect the user to the Google authentication URL redirect_uri = request.build_absolute_uri(reverse_lazy('google_auth:callback')) authorization_url = f'https://accounts.google.com/o/oauth2/auth?response_type=code&client_id={settings.GOOGLE_OAUTH2_CLIENT_ID}&redirect_uri={redirect_uri}&scope=openid%20email%20profile' return redirect(authorization_url) def callback(request): authorization_code = request.GET.get('code') token_url = 'https://oauth2.googleapis.com/token' redirect_uri = request.build_absolute_uri(reverse_lazy('google_auth:callback')) token_request_data = { 'code': authorization_code, 'client_id': settings.GOOGLE_OAUTH2_CLIENT_ID, 'client_secret': settings.GOOGLE_OAUTH2_CLIENT_SECRET, 'redirect_uri': redirect_uri, 'grant_type': 'authorization_code' } token_response = requests.post(token_url, data=token_request_data) token_response_data = token_response.json() id_token_data = id_token.verify_oauth2_token( token_response_data['id_token'], google_requests.Request(), settings.GOOGLE_OAUTH2_CLIENT_ID ) return redirect('http://127.0.0.1:8000')