Как заставить "Войти с 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",
}
}}