Обновить токен, который не генерируется в сети при интеграции календаря Google через JavaScript - PullRequest
0 голосов
/ 11 мая 2019

Я работаю над интеграцией календаря Google. Ранее я открывал страницу авторизации Google через Python. Но когда я делал это, он открывает мою страницу авторизации в терминале, где работает мой сервер. Поэтому я отделяю свой auth uri и перенаправляю в другую функцию. и откройте страницу авторизации через javascript, используя приведенный ниже код.

window.location.href = data['uri']+'&redirect_uri=https://"domain"/integrations/get_google_calendar_auth/';

Но проблема, когда я делаю это. Google не генерирует токен обновления. Итак, впервые интеграция работает правильно, а событие сохраняется в календаре Google. но через некоторое время он начинает выдавать ошибки.

Это код, который я использую для генерации URI

def get_credentials(request):
    creds = None
    if os.path.exists('token.pickle_' + request.GET.get('bot_id')):
        with open('token.pickle_' + request.GET.get('bot_id'), 'rb') as token:
            creds = pickle.load(token)
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                CLIENT_SECRET_FILE, SCOPES)
            uri = flow.authorization_url()

и это код, который я использую для создания токена доступа и обновления токена.

def get_google_calendar_auth(request):
    # Save the credentials for the next run

    from apiclient.discovery import build
    from oauth2client.file import Storage
    from oauth2client.client import flow_from_clientsecrets
    from oauth2client import tools
    MISSING_CLIENT_SECRETS_MESSAGE = ""

    token_file = open('integrations/credentials.json', 'rb').read()
    print(token_file)
    client_id = json.loads(token_file)['web']['client_id']
    client_secret = json.loads(token_file)['web']['client_secret']
    token_uri = json.loads(token_file)['web']['token_uri']

    from oauth2client.client import OAuth2WebServerFlow
    flow2 = OAuth2WebServerFlow(client_id=client_id,
                                client_secret=client_secret,
                                scope=SCOPES,
                                redirect_uri='https://"domain"/integrations/get_google_calendar_auth')

    # flow2 = flow_from_clientsecrets(CLIENT_SECRET_FILE, ' '.join(SCOPES))
    # flow2.redirect_uri = 'https://"domain"/integrations/get_google_calendar_auth/'
    try:
        credentials = flow2.step2_exchange(request.GET.get('code'))
    except Exception as e:
        print(e)

    with open('token.pickle_' + request.session['bot_id'], 'wb') as token:
        pickle.dump(credentials, token)
        serializer = CalenderIntegrationSerializer(data={'bot_id': int(request.session['bot_id']), 'status': True})
        if serializer.is_valid():
            serializer.save()
    if os.path.exists('token.pickle_' + request.session['bot_id']):
        context = {'signin_url': credentials}
    return redirect("/dashboard")

Пожалуйста, помогите решить эту проблему.

Спасибо-вы

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