У меня есть сценарий Python, работающий на Raspberry Pi, который получает события Google Calendar (используя Google-Api-Python-Client и Google-Auth-Oauthlib) и отображает их на дисплее электронной бумаги WaveShare. Скрипт (Calendara2.py) работает автоматически через Cron (@reboot, 06:00, 13:00, 19:00), используя сценарий обертки, который активирует виртуальную среду Python (venv). < /P>
Проблем токен. Pickle). Он успешно использует токен обновления в течение некоторого времени. Однако после периода (кажется, дни или, может быть, неделю), он перестает работать и требует, чтобы я снова запустил полный процесс аутентификации ручного управления, чтобы восстановить токен. Я пытаюсь понять, почему токен обновления перестает работать или почему необходима повторная аутентификация. Тем не менее, основной проблемой, которую мне нужно решить, является периодическая необходимость вручную повторно аутифицировать с нуля. < /P>
Логика аутентификации (внутренняя основная функция календара2.py): < /p>
Это кодовый блок, выполненный в начале основного () для обработки кредитов: < /p>
< /p> < /p>
what abled of Main () < /p>
import os
import pickle
import logging
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.auth.exceptions import RefreshError
# SCOPES defined earlier as: ['https://www.googleapis.com/auth/calendar.readonly']
creds = None
# Carica token esistente
if os.path.exists('token.pickle'):
try:
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
logging.debug("File token.pickle caricato.")
except Exception as e:
logging.error(f"Errore nel caricare token.pickle: {e}. Verrà tentata nuova autenticazione.")
creds = None
# Se non valido, prova a refreshare
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token: # Check if refresh possible
try:
logging.info("Tentativo di refresh del token Google...")
creds.refresh(Request()) # Perform refresh
# Salva il token rinfrescato
with open('token.pickle', 'wb') as token: # Save refreshed
pickle.dump(creds, token)
logging.info("Token rinfrescato e salvato.")
except RefreshError as e: # Handle specific refresh failure
logging.error(f"Errore durante il refresh del token: {e}")
logging.error("Impossibile rinfrescare il token. Eseguire 'autentica.py' separatamente.")
# In a real scenario, the script would exit here (e.g., return from main)
# For Stack Overflow: Indicate script failure here
print("SCRIPT EXITING DUE TO REFRESH ERROR")
exit() # Simulate exit for clarity
except Exception as e: # Handle other refresh/save errors
logging.error(f"Errore generico durante il refresh: {e}", exc_info=True)
# In a real scenario, the script would exit here
print("SCRIPT EXITING DUE TO GENERIC REFRESH ERROR")
exit() # Simulate exit for clarity
else: # Handle cases where refresh is not possible
# This path is taken if token.pickle doesn't exist,
# is invalid for other reasons, or lacks a refresh token.
logging.error("File token.pickle non trovato o invalido senza refresh token.")
logging.error("Eseguire lo script 'autentica.py' separatamente per autenticarsi.")
# In a real scenario, the script would exit here
print("SCRIPT EXITING DUE TO MISSING/INVALID TOKEN")
exit() # Simulate exit for clarity
# If we reach here, creds should be valid
# Proceed to build service...
# service = build('calendar', 'v3', credentials=creds)
# ... rest of script
< /code>
На основании моего использования и проверки: < /p>
Я не отозвал доступ вручную в настройках своей учетной записи Google.
Я не менял пароль своей учетной записи Google.
Script работает несколько раз в день, поэтому этот токен часто используется, и это не только протоко Поэтому я не должен нажимать на пределы токенов обновления.
Недавно не было внесено изменений в настройку по областям или конфигурации согласия OAuth. "Тестирование". Я не нажимал на «публикацию приложения», так как я не собираюсь использовать его использовать его. Может ли статус «тестирования» приложения быть основной причиной, даже для личного использования, заставляя токен обновления истекать или в конечном итоге стать недействительным (например, через 7 дней), вынуждая повторную аутентификацию, несмотря на непосредственные неудачи, иногда показывающиеся как срок службы в журналах? Каков рекомендуемый подход для долгосрочной стабильной аутентификации для такого сценария личного использования? Запросы, подушка, Waveshare-epd
racope: https://www.googleapis.com/auth/calendar.readonly
Спасибо за любые идеи!
Подробнее здесь: https://stackoverflow.com/questions/795 ... henticatio
Скрипт календаря Google Python на Raspberry Pi требует периодической повторной аутентификации (вопрос начинающего, извин ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Google Picker API в приложении UWP требует постоянной повторной аутентификации
Anonymous » » в форуме C# - 0 Ответы
- 39 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Лучший курс Python в Коимбаторе – от начинающего до продвинутого уровня»
Anonymous » » в форуме Javascript - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Найдите время следующего выполнения периодической задачи в Celery Beat
Anonymous » » в форуме Python - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Получение периодической ошибки InterfaceError(0, '') в Django3.2 с MySQL5.7
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-