You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

35 line
1.4 KiB

  1. from django.shortcuts import redirect
  2. from google.oauth2 import id_token
  3. from django.conf import settings
  4. from django.urls import reverse_lazy
  5. import requests
  6. from google.auth.transport import requests as google_requests
  7. def login(request):
  8. # Redirect the user to the Google authentication URL
  9. redirect_uri = request.build_absolute_uri(reverse_lazy('google_auth:callback'))
  10. 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'
  11. return redirect(authorization_url)
  12. def callback(request):
  13. authorization_code = request.GET.get('code')
  14. token_url = 'https://oauth2.googleapis.com/token'
  15. redirect_uri = request.build_absolute_uri(reverse_lazy('google_auth:callback'))
  16. token_request_data = {
  17. 'code': authorization_code,
  18. 'client_id': settings.GOOGLE_OAUTH2_CLIENT_ID,
  19. 'client_secret': settings.GOOGLE_OAUTH2_CLIENT_SECRET,
  20. 'redirect_uri': redirect_uri,
  21. 'grant_type': 'authorization_code'
  22. }
  23. token_response = requests.post(token_url, data=token_request_data)
  24. token_response_data = token_response.json()
  25. id_token_data = id_token.verify_oauth2_token(
  26. token_response_data['id_token'],
  27. google_requests.Request(),
  28. settings.GOOGLE_OAUTH2_CLIENT_ID
  29. )
  30. return redirect('http://127.0.0.1:8000')