вход в гугл с Django остальные API (Android и IOS) - PullRequest
0 голосов
/ 23 октября 2019

Я пишу бэкэнд для входа в Google для Android и IOS. Для Android мы можем использовать идентификатор клиента веб-приложения и секрет клиента, но для ios Google предоставляет только идентификатор клиента, а не секретный ключ. Поэтому я не могу выполнить вход в Google из IOS.

Поскольку ios и android требуют двух разных учетных данных клиента, как я могу включить два идентификатора клиента в один проект (один для android и один для ios)?

Это код Back iиспользовали:

serializers.py

class SocialSerializer(serializers.Serializer):
    """
    Serializer which accepts an OAuth2 access token and provider.
    """
    provider = serializers.CharField(max_length=255, required=True)
    access_token = serializers.CharField(max_length=4096, required=True, trim_whitespace=True)

views.py

class SocialLoginView(generics.GenericAPIView):
    """
    Log in using facebook or Google 
    """
    serializer_class = serializers.SocialSerializer
    permission_classes = [permissions.AllowAny]

    def get_tokens_for_user(self, user):
        refresh = RefreshToken.for_user(user)

        return {
            'refresh': str(refresh),
            'access': str(refresh.access_token),
        }

    def post(self, request):
        """Authenticate user through the provider and access_token"""
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        provider = serializer.data.get('provider', None)
        strategy = load_strategy(request)

        try:
            backend = load_backend(strategy=strategy, name=provider,
            redirect_uri=None)

        except MissingBackend:
            return Response({'error': 'Please provide a valid provider'},
            status=status.HTTP_400_BAD_REQUEST)
        try:
            if isinstance(backend, BaseOAuth2):
                access_token = serializer.data.get('access_token')
            user = backend.do_auth(access_token)
        except:
            return Response({
                "error": "Invalid Credentials",
            }, status=status.HTTP_400_BAD_REQUEST)

        try:
            authenticated_user = backend.do_auth(access_token, user=user)
        except:
            return Response({
                "error": "Invalid Token"
            }, status=status.HTTP_400_BAD_REQUEST)

        if authenticated_user and authenticated_user.is_active:
            data = self.get_tokens_for_user(authenticated_user)
            response = {
                "email": authenticated_user.email,
                "username": authenticated_user.username,
                "refresh": data.get('refresh'),
                "access": data.get('access')
            }
            return Response(status=status.HTTP_200_OK, data=response)

urls.py

urlpatterns = [
    path('api/auth/oauth/', SocialLoginView.as_view()),
]

Кто-нибудь может мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...