Как сохранить объект Google Auth Credentials в Django? - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь интегрировать Google Tag Manager в свой проект. В официальном документе Google предлагает библиотеку oauth2client. К сожалению, эта библиотека устарела. Я использовал google_auth_oauthlib. Я могу получить токен и отправить запрос API Google Tag Manager с помощью этого токена. Но я не решаю, как мне сохранить объект учетных данных в Django. В oauth2client lib есть CredentialsField для модели. Мы можем сохранить объект Credentials в этом поле с помощью DjangoORMStorage. Но я не могу использовать эту устаревшую библиотеку. Существуют ли альтернативные способы?

Документ диспетчера тегов Google здесь

Мои коды здесь:

from google_auth_oauthlib.flow import Flow
from googleapiclient.discovery import build

FLOW = Flow.from_client_secrets_file(
    settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON,
    scopes=[settings.GOOGLE_OAUTH2_SCOPE])

class GTMAuthenticateView(APIView):
    def get(self,request,**kwargs):
        FLOW.redirect_uri = settings.GOOGLE_OAUTH2_REDIRECT_URI
        authorization_url, state = FLOW.authorization_url(access_type='offline',
        include_granted_scopes='true')
        return Response({'authorization_url':authorization_url,'state':state})

    def post(self, request, **kwargs):
        FLOW.fetch_token(code=request.data['code'])
        credentials = FLOW.credentials
        return Response({'token':credentials.token})

class GTMContainerView(APIView):
    def get(self,request,**kwargs):
        service = get_service()
        containers = self.get_containers(service)
        return Response({'containers':str(containers),'credentials':str(FLOW.credentials)})

    @staticmethod
    def get_containers(service):
        account_list = service.accounts().list().execute()
        container_list = []
        for account in account_list['account']:
            containers = service.accounts().containers().list(parent=account["path"]).execute()
            for container in containers["container"]:
                container["usageContext"] = container["usageContext"][0].replace("['", "").replace("']", "")
                container_list.append(container)
        return container_list

def get_service():
    try:
        credentials = FLOW.credentials
        service = build('tagmanager', 'v2', credentials=credentials)
        return service
    except Exception as ex:
        print(ex)

1 Ответ

0 голосов
/ 08 апреля 2020

Просто переключитесь на Django 2 pip install Django == 2.2.12 Я сделал это и отлично работает

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