Как использовать учетные данные, полученные от google, с помощью google API
Libs: dj-rest-auth + allauth
I. Я пытаюсь взаимодействовать с google API с учетными данными, которые я использую для получения внутреннего токена доступа. Мне удалось получить code
и token
, но я не могу найти, как использовать их с google API. Последняя страница, которую я нашел неприменимой, это https://github.com/googleapis/google-api-python-client/blob/main/docs/oauth.md, но, возможно, я что-то упускаю.
Вот представление, в котором я пытаюсь использовать google API:
class CreateGoogleDoc(GenericAPIView):
...
def get(self, request):
token = request.query_params['token']
module_dir = os.path.dirname(__file__) # get current directory
file_path = os.path.join(module_dir, 'client_secret.json')
flow = Flow.from_client_secrets_file(
file_path,
scopes=SCOPES,
redirect_uri='https://example.com'
)
credentials = service_account.Credentials.from_service_account_file(file_path, scopes=SCOPES)
service = build('docs', 'v1', credentials=credentials)
document = service.documents().create().execute()
return Response([document['documentId']])
II. Когда я попытался поменять code
на внутренний класс токенов доступа, я получил другую ошибку:
Error retrieving access token: `{ "error": "invalid_request", "error_description": "You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy for keeping apps secure. You can let the app developer know that this app doesn't comply with one or more Google validation rules."}`
Вот представление, которое я использую для свопинга:
GoogleLogin(SocialLoginView):
adapter_class = GoogleOAuth2Adapter
callback_url = 'http://localhist:8000/dj-rest-auth/google/'
client_class = OAuth2Client
Спасибо!
Предложение обходного пути
Если у вас уже есть токен из ответа GET, почему вы пытаетесь получить учетные данные из файла учетной записи службы? Возможно, там какая-то неправильная конфигурация, но если у вас уже есть токен доступа, вы можете просто использовать его, как показано ниже, и избежать всего процесса получения токена из учетной записи службы.
from google.oauth2.credentials import Credentials
# ...
def get(self, request):
token = request.query_params['token']
credentials = Credentials(token)
service = build('docs', 'v1', credentials=credentials)
document = service.documents().create().execute()
return Response([document['documentId']])