Интеграция google oauth для системы входа/регистрации на gmail
Я разрабатываю приложение, которое будет доступно как в приложении, так и в вебе. Я хочу, чтобы мои клиенты могли входить/регистрироваться и через gmail. Для этого мне нужно интегрировать систему google auth для социальных логинов. Моя конечная цель - установить соединение с google и извлечь из него данные пользователя, такие как имя, profile_pic, dob, sub.
Я следовал приведенному ниже подходу для своего приложения, и оно сработало.
from google.oauth2 import id_token
from google.auth.transport import requests
id_info = id_token.verify_oauth2_token(token, requests.Request(), google_client_id)
print(id_info['sub'], id_info['email'])
это отлично работает для приложения и предоставляет мне все пользовательские данные.
Теперь, когда я пытаюсь сделать это для веб, из всех способов, которые я смог найти, я попробовал использовать вызовы API google, как показано ниже
В веб-версии мы получаем код в запросе callback API от google в качестве параметра запроса. В обмен на этот код мы должны получить от google auth-токен и затем использовать этот токен для получения данных пользователя. (Вот как это работает, насколько я понимаю)
data = {
'code': code,
'client_id': my_client_id,
'client_secret': my_client_secret_key,
'redirect_uri': redirect_uri,
'grant_type': 'authorization_code'
}
response = requests.post('https://oauth2.googleapis.com/token', data=data)
if not response.ok:
logger.info('Could not get access token from Google.')
return
access_token = response.json()['access_token']
response2 = requests.get(
'https://www.googleapis.com/oauth2/v2/userinfo',
params={'access_token': access_token}
)
return response2.json()
Теперь в этом чанке я могу получить данные пользователя, если я передаю любой access_token. Но проблема заключается в том, что при получении access_token из кода с помощью этого кода. Я получаю ответ в виде
{'error': 'invalid_grant', 'error_description': 'Bad Request'}
или
{'error': 'unauthorized_client', 'error_description': 'Unauthorized'}
Где я совершаю ошибку. P.S. Мои учетные данные верны.
Для интеграции социальных аутентификаторов следует использовать встроенные приложения Django. Это намного проще для одновременной реализации всех третьих сторон.
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',