2016-04-18 17 views
0

ich javascript bin mit ID-Token von dem Benutzer und möchten den Offline-Zugriff sowie den Zugang zu seiner gmail Informationen zu erhalten. Das Problem ist, dass das Popup-Fenster nur gmail und grundlegende Info-Berechtigungen anzeigt. Das Offline-Autorisierungs-Popup wird nur angezeigt, nachdem Sie erneut auf die Schaltfläche geklickt haben. Wenn Sie danach auf die Schaltfläche klicken, wird weiterhin das Offline-Popup angezeigt. Warum kann ich sie nicht alle in einem Fenster haben? Oder wie kann ich sie wenigstens dazu bringen, beides gleichzeitig zu öffnen?Der Benutzer muss zweimal für mich Klick-Zugriff Offline-+ Gmail zu bekommen

Dies ist mein Code:

function start() { 
      gapi.load('auth2', function() { 
       auth2 = gapi.auth2.init({ 
        client_id: ' ', 
       }).then(function() {    
        auth2 = gapi.auth2.getAuthInstance(); 
        if (auth2.isSignedIn.get()) { 
         window.location.href = "ClientHome.aspx"; 
        } 
       }); 
      }); 
     } 
     function LogIn() { 
      auth2.grantOfflineAccess({ redirect_uri: 'postmessage', approval_prompt: 'force', scope: 'https://mail.google.com/', include_granted_scopes: 'true' }).then(signInCallback); 

Antwort

0

Anfragen an die Google Mail-API muss Offline access mit OAuth2.0 Anmeldeinformationen autorisiert werden. Sie sollten den serverseitigen Flow verwenden, wenn Ihre Anwendung im Auftrag des Benutzers auf Google-APIs zugreifen muss. Dieser Ansatz erfordert das Übergeben eines einmaligen Autorisierungscodes von Ihrem Client an Ihren Server. Er erwirbt ein Zugriffstoken und aktualisiert Tokens für Ihren Server. Das Zugriffstoken wird an die Gmail-API übergeben, um Ihrer Anwendung den Zugriff auf Benutzerdaten zu gewähren.

Die folgenden Codebeispiele demonstrieren Austausch einen Berechtigungscodes für einen Zugriffstoken mit dem Offline-Zugriff und die Aktualisierungs-Token gespeichert werden.

def get_authorization_url(email_address, state): 
"""Retrieve the authorization URL. 

Args: 
email_address: User's e-mail address. 
state: State for the authorization URL. 
Returns: 
Authorization URL to redirect the user to. 
""" 
flow = flow_from_clientsecrets(CLIENTSECRETS_LOCATION, ' '.join(SCOPES)) 
flow.params['access_type'] = 'offline' 
flow.params['approval_prompt'] = 'force' 
flow.params['user_id'] = email_address 
flow.params['state'] = state 
return flow.step1_get_authorize_url(REDIRECT_URI) 


def get_credentials(authorization_code, state): 
"""Retrieve credentials using the provided authorization code. 

email_address = '' 
try: 
credentials = exchange_code(authorization_code) 
user_info = get_user_info(credentials) 
email_address = user_info.get('email') 
user_id = user_info.get('id') 
if credentials.refresh_token is not None: 
store_credentials(user_id, credentials) 
return credentials 
else: 
credentials = get_stored_credentials(user_id) 
if credentials and credentials.refresh_token is not None: 
return credentials 
except CodeExchangeException, error: 
logging.error('An error occurred during code exchange.') 
# Drive apps should try to retrieve the user and credentials for the current 
# ses 
+0

Nein, Sie sehen, ich habe alles andere arbeiten ich die ID abrufen kann Zugriff zu erhalten und Token-Server-Seite zu aktualisieren, mein Problem ist, Client-Seite, muss der Client ZWEIMAL auf den Button klicken, um sowohl gmail und Offline-Zugriff bestätigen Das ist nicht praktisch –