Как заставить "Войти с Google" работать, используя "dj_rest_auth"?

Я пытаюсь реализовать вход в Google с помощью DRF и dj_rest_auth.

Я настроил 'django-allauth' с Google в качестве провайдера, и процесс входа работает в веб-браузере.

Мне нужно соединить приложение android с моим бэкендом. Я создал конечные точки API, которые требуют аутентификации.

Согласно docs, code требуется для завершения аутентификации и получения токена.

Проведя некоторое исследование, я обнаружил, что code, требуемый dj_rest_auth, можно получить, посетив:

https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=<YOUR CALLBACK URL>&prompt=consent&response_type=code&client_id=<YOUR CLIENT ID>&scope=openid%20email&access_type=offline

Однако, даже после передачи code возвращенного в параметре запроса (после декодирования из формата URL), выдается следующая ошибка:

Error retrieving access token: b'{\n  "error": "invalid_grant",\n  "error_description": "Bad Request"\n}'

Чтобы проверить, могу ли я войти в систему с недавним токеном access, я вошел в систему под своей учетной записью Google с главной страницы, скопировал токен access из раздела администратора и отправил его в конечную точку http://localhost:8000/dj-rest-auth/google/. Я смог получить токен авторизации, сгенерированный dj_rest_auth.

Мне нужна помощь в получении auth-токена путем предоставления code в пост-запросе.

Мой код:

# urls.py
...
path('dj-rest-auth/', include('dj_rest_auth.urls')),
path('dj-rest-auth/registration/', include('dj_rest_auth.registration.urls')),
path('dj-rest-auth/google/', home.GoogleLogin.as_view(), name='google_login'),
...

# views.py

from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
from allauth.socialaccount.providers.oauth2.client import OAuth2Client
from dj_rest_auth.registration.views import SocialLoginView

class GoogleLogin(SocialLoginView):
    adapter_class = GoogleOAuth2Adapter
    callback_url = 'http://localhost:8000/accounts/google/login/callback/'
    client_class = OAuth2Client
...

Ссылки:

Google Social Authentication with dj-rest-auth #220

Минимальный пример SPA-реализации социального входа #147

Пожалуйста, помогите мне.

Вы создали ключи аутентификации в Google Cloud и добавили их в settings.py ?

Для меня это выглядит так в настройках :

SOCIALACCOUNT_PROVIDERS = {
"google": {
    # For each OAuth based provider, either add a ``SocialApp``
    # (``socialaccount`` app) containing the required client
    # credentials, or list them here:
    "APP": {
        "client_id": os.environ.get("GOOGLE_CLIENT_ID"),
        "secret": os.environ.get("GOOGLE_SECRET_KEY"),
        "key": ""
    },
    # These are provider-specific settings that can only be
    # listed here:
    "SCOPE": [
        "profile",
        "email",
    ],
    "AUTH_PARAMS": {
        "access_type": "online",
    }
}}
Вернуться на верх