views.py 991 B

123456789101112131415161718192021222324
  1. from rest_framework import generics, permissions, status
  2. from rest_framework.response import Response
  3. from social_django.utils import load_backend, load_strategy
  4. from djoser.conf import settings
  5. from djoser.social.serializers import ProviderAuthSerializer
  6. class ProviderAuthView(generics.CreateAPIView):
  7. permission_classes = [permissions.AllowAny]
  8. serializer_class = ProviderAuthSerializer
  9. def get(self, request, *args, **kwargs):
  10. redirect_uri = request.GET.get("redirect_uri")
  11. if redirect_uri not in settings.SOCIAL_AUTH_ALLOWED_REDIRECT_URIS:
  12. return Response(status=status.HTTP_400_BAD_REQUEST)
  13. strategy = load_strategy(request)
  14. strategy.session_set("redirect_uri", redirect_uri)
  15. backend_name = self.kwargs["provider"]
  16. backend = load_backend(strategy, backend_name, redirect_uri=redirect_uri)
  17. authorization_url = backend.auth_url()
  18. return Response(data={"authorization_url": authorization_url})