1
from oauth2client.client import OAuth2WebServerFlow 
from oauth2client.tools import run_flow 
from oauth2client.file import Storage 
import requests  

CLIENT_ID = '9453asfasfaksdfh860b1osoiveogstt.apps.googleusercontent.com' 
CLIENT_SECRET = '6gRid8wF7TW8asdfasdftX' 


flow = OAuth2WebServerFlow(client_id=CLIENT_ID, 
          client_secret=CLIENT_SECRET, 
          scope='https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly', 
          redirect_uri='http://example.com/auth_return') 

storage = Storage('creds.data') #token details stored here 
credentials = run_flow(flow, storage) 
tokenhere=credentials.access_token #tokens generated 

#send get request with token generated using requests 
r=requests.get("https://www.googleapis.com/admin/directory/v1/users?domain=mydomain.ocm",headers={'Authorization': 'Bearer {token}'.format(token=tokenhere)})  
result=r.json() 

Dies ist, wie ich erfolgreich mit Google authentifizieren und die Benutzer abgerufen habe.

Jetzt, wenn ich das ausführen. Es zeigt mir die Seite, um Google-Konto zu überprüfen und einen Zustimmungsbildschirm für die Erlaubnis zu wählen.Wie authentifiziere ich mich einmal mit Google Mail und verwende die generierten Token?

Aber das Problem ist, passiert es jedes Mal, wenn ich dies ausführen.

Ich weiß, sobald wir das nächste Mal autorisieren, müssen wir diese Schritte nicht immer wieder wiederholen, sondern direkt das Token übergeben oder das gespeicherte Token verwenden.

Wie ist das wirklich umgesetzt? Keine genauen Hinweise. Irgendjemand bitte mich dabei. Wie und wo kann ich diesen Teil machen? Jetzt ist es mir gelungen, das autorisierte Token zu überprüfen und zu bekommen.

EXTRA: Die Art, wie ich Token bin immer anders aussehen, weil ich versuche, das Token direkt in der Konsole zu holen und so ein Modul für diesen Zweck verwendet wurden und so sieht so

Antwort

0

Wenn ich es richtig sollte dies verstehen werden, was Sie suchen:

from oauth2client.client import OAuth2WebServerFlow 
from oauth2client.tools import run_flow 
from oauth2client.file import Storage 
import requests 
import os 


CLIENT_ID = '9453asfasfaksdfh860b1osoiveogstt.apps.googleusercontent.com' 
CLIENT_SECRET = '6gRid8wF7TW8asdfasdftX' 

def get_new_token(): 
    flow = OAuth2WebServerFlow(client_id=CLIENT_ID, 
           client_secret=CLIENT_SECRET, 
           scope='https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly', 
           redirect_uri='http://example.com/auth_return') 
    storage = Storage('creds.data') #token details stored here 
    credentials = run_flow(flow, storage) 
    tokenhere=credentials.access_token #tokens generated 
    return tokenhere 

def retrieve_saved_token(): 
    if os.path.exists('creds.data'): 
     with open('creds.data') as creds: 
      tokenhere = creds.read() # Change to reflect how the token data is reflected in your 'creds.data' file 
    return tokenhere 

def request_page(tokenhere): 
    r = requests.get("https://www.googleapis.com/admin/directory/v1/users?domain=mydomain.com", 
        headers={'Authorization': 'Bearer {token}'.format(token=tokenhere)}) 
    result = r.json() 

try: 
    tokenhere = retrieve_saved_token() 
    request_page(tokenhere) 
except: 
    tokenhere = get_new_token() 
    request_page(tokenhere) 

Gegliedert hier sind alle Komponenten von dem, was getan

einfach mehr Objekt ausgerichtet werden, ich Ihre Logik in Funkt bewegt Ionen:

def get_new_token(): 
    flow = OAuth2WebServerFlow(client_id=CLIENT_ID, 
           client_secret=CLIENT_SECRET, 
           scope='https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly', 
           redirect_uri='http://example.com/auth_return') 
    storage = Storage('creds.data') #token details stored here 
    credentials = run_flow(flow, storage) 
    tokenhere=credentials.access_token #tokens generated 
    return tokenhere 

def request_page(tokenhere): 
    r = requests.get("https://www.googleapis.com/admin/directory/v1/users?domain=mydomain.com", 
        headers={'Authorization': 'Bearer {token}'.format(token=tokenhere)}) 
    result = r.json() 

Ich habe auch eine neue Funktion eine gespeicherte Token, wenn der Token-Datei existiert abzurufen:

def retrieve_saved_token(): 
    if os.path.exists('creds.data'): 
     with open('creds.data') as creds: 
      tokenhere = creds.read() # Change to reflect how the token data is reflected in your 'creds.data' file 
    return tokenhere 

Schließlich bekommen wir zu dem Teil, wo die Logik tatsächlich läuft.

Zuerst versucht es, das Token aus der Datei abzurufen. Wenn die Datei nicht existiert, wird eine Exception ausgelöst und Sie gelangen zur Ausnahmelogik. Die Art und Weise, wie die try-Logik geschrieben wird, fängt auch an, wenn ein Token erfolgreich abgerufen werden kann, aber wenn dieses Token abgelaufen ist, sollte die Anforderungslogik eine Ausnahme auslösen.

in der Ausnahmelogik es tut Ihre ursprüngliche Logik ein neues Token bekommen und die Seite mit dem Token

try: 
    tokenhere = retrieve_saved_token() 
    request_page(tokenhere) 
except: 
    tokenhere = get_new_token() 
    request_page(tokenhere) 

EDIT 1

anfordernden

ich, dass Sie einfach nicht wollen, gehe davon aus um die Seite anzufordern, aber auch die Daten auf der Seite zu manipulieren. Dazu müssten Sie eine andere Funktion verwenden, die Daten von der Seite abruft, indem Sie im von Ihnen erstellten json-Objekt 'result' nach Tags suchen. Ich rufe diese Funktion 'do_something_with_request_function()' im folgenden Code auf.

Das erste Try/Except überprüft, ob eine Token-Datei existiert, wenn es dann dieses Token ergreift und es benutzt, wenn es das nicht tut, wird es ein neues Token erzeugen.

Der zweite Versuch hat eine Chance, einen abgelaufenen Token zu übergeben. Nehmen wir zwei Szenarien an.
Szenario 1: Sie übergeben ein gültiges Token, Sie erhalten die Seite, die Sie in der Anfrage benötigen.Ihre Methode, die Sie verwenden, um die Daten auf der Seite zu analysieren, sucht nach bestimmten Feldern, die auf dieser Seite vorhanden sind, alles funktioniert einwandfrei.
Szenario 2: Sie übergeben ein ungültiges Token, Sie erhalten eine Fehlerseite für abgelaufenes/ungültiges Token. Ihre Methode, die diese Seite nach json analysiert und versucht, die Daten zu manipulieren, würde Fehler ausgeben, wenn sie keinen Wert findet, der normalerweise auf der tatsächlichen Seite vorhanden wäre, zu der Sie gelangen möchten. Dies würde den Code zwingen, zu dem Ausnahmeblock zu springen.
Der Block except generiert ein neues Token, übergibt es, um die Seite erneut anzufordern, und verarbeitet Ihre Daten ordnungsgemäß.

try: 
    tokenhere = retrieve_saved_token() 
except: 
    tokenhere = get_new_token() 
try: 
    request_page(tokenhere) 
    do_something_with_request_function(result) 
except: 
    tokenhere = get_new_token() 
    request_page(tokenhere) 
    do_something_with_request_function(result) 
+0

so alles über das Abrufen des Tokens aus dem gespeicherten Speicherort. Aber was ist mit dem Token abläuft wie man damit umgeht, was man dafür machen kann –

+0

Ich habe die Logik mit Kommentaren geändert. Der neue Code ist unter ** EDIT 1 ** aufgeführt. Dies sollte Ihr Szenario behandeln, wenn ein Token abläuft. – HackerShark

+0

Mit diesem müssen wir reauthorized, Wenn wir nicht die Aktualisierung toke verwenden, bedeutet das Generieren neuer Token bedeutet, den Benutzer erneut autorisiert, was er einmal getan hat. Richtig –

Verwandte Themen