2016-11-21 2 views
0

Ich verwende Django mit python-social-auth, um meine Benutzer mit Google OAuth2 zu authentifizieren und die Youtube-API zu verwenden.So aktualisieren Sie das Google OAuth2-Token programmgesteuert

Was Ich mag würde, ist, sie zu erreichen, bitten anmelden und genehmigen nur einmal und der Lage sein, ihre Anmeldeinformationen zu verwenden, solange ich will. Dies ist nicht möglich, da sie nach etwa einer Stunde ablaufen und der Benutzer meine Anwendung erneut autorisieren muss, um neue Anmeldeinformationen zu erhalten.

Ich nehme an, die Lösung besteht darin, die Berechtigungen regelmäßig zu aktualisieren, aber ich konnte keine zuverlässige Anleitung finden, wie dies zu tun ist.

Meine aktuelle Konfiguration ist:

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'the_key' 
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'the_secret' 
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = ["https://www.googleapis.com/auth/youtube.readonly", "https://www.googleapis.com/auth/yt-analytics.readonly"] 
SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = { 
    'access_type': 'offline', 
    'approval_prompt': 'force' 
} 

Auch ein autorisierter Benutzer die folgenden Extras hat:

{ 
    "access_token": "the_access_token", 
    "expires": 3600, 
    "refresh_token": "the_refresh_token", 
    "token_type": "Bearer" 
} 

Ich habe versucht, es mit dem folgenden Code erfrischend, aber da es abgelaufen ist immer noch ich denke, es ist nicht der richtige Weg:

+0

Sie können den 'expires' Wert erhöhen –

+0

setzen Sie Wert verfällt so lang wie Sie wollen –

+0

Wo kann ich meinen Wert "abläuft" setzen? In Google API-Konsole oder ist es eine Konfiguration für PSA? – ihhcarus

Antwort

0

Nach ein paar mehr Tests habe ich herausgefunden, dass mit refresh_token tut es tatsächlich für eine weitere Stunde der Nutzung aufzufrischen, so, was ich tun müssen, um einen Cron-Job haben einen Django Befehl auszuführen, sie vor Ablauf zu aktualisieren, so etwas wie unten:

# app/management/commands/refresh_token_youtube.py  

from django.core.management.base import BaseCommand 
from social.apps.django_app.me.models import UserSocialAuth 
from social.apps.django_app.utils import load_strategy 


class Command(BaseCommand): 
    def handle(self, *args, **options): 
     for social_user in UserSocialAuth.objects.filter(provider='google-oauth2'): 
      social_user.refresh_token(load_strategy()) 

# crontab to run it every 30th minute 

*/30 * * * * /path_to/env/bin/python /path_to/refresh_token_youtube.py 

Was ich aber wirklich gesucht eine Möglichkeit, das Token auf Anforderung zu aktualisieren, wie es bei anderen sozialen Netzwerken (Instagram, Twitter, Facebook) der Fall ist, die nur eine Anmeldung benötigen und die Anmeldedaten nie ablaufen.

Verwandte Themen