Я работаю над интеграцией календаря 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")
Пожалуйста, помогите решить эту проблему.
Спасибо-вы