2013-11-27 6 views
5

Sto provando a caricare alcuni documenti sul disco Google, voglio eseguire uno script cron che viene eseguito a mezzanotte tutti i giorni e i file generati come risultato devono essere caricati sugli usi Google Drive.Automatizza l'autenticazione oauth senza browser nell'utilità cron

Ho provato lo script autonomo, che carica il documento sull'unità Google, ma per quello devo sempre consentire l'accesso tramite browser.

Tuttavia, il mio scopo è eseguire un cron e caricare i file, al momento dell'esecuzione del cron non ci sarà accesso al browser.

Esiste un modo per eseguire il processo di autenticazione senza l'intervento manuale.

qualsiasi aiuto in questo caso sarebbe molto apprezzato.

THanks,

risposta

0

Hi ho capito il problema,

mi stava generando token di aggiornamento da oauthplayground e stava cercando di integrarlo nello script php .... che non era valido ......

Ho poi stampato il token di aggiornamento restituito per la prima volta quando un utente consente l'accesso e lo utilizza per la generazione futura di token di accesso e funziona come un incantesimo. grazie Tutti per aiuto

+0

Si * può * usare Oauth Playground, ma è necessario inserire il proprio ID cliente. Vedi http://stackoverflow.com/questions/19766912/how-do-i-authorise-a-background-web-app-without-user-intervention-canonical – pinoyyid

2

puoi autorizzare la tua app (script) con Google Drive.

Qui hai menzionato che stai scrivendo uno script che carica documenti nel tuo Google Drive. Ti suggerisco di registrare un'app in Google Cloud Console per ottenere l'ID cliente e il Segreto clienti, in primo luogo, e attivare l'API Drive per l'app registrata.

Quindi utilizzare questo ID client e Segreto per eseguire il flusso Oauth nello script per ottenere un token di accesso e un token di aggiornamento, la durata della vita del token di accesso è di circa 3600s, e se è scaduta, è possibile ottenerne una nuova con l'aggiornamento gettone.

L'interazione dell'utente (consenso) è richiesta solo la prima volta che si richiede il token di accesso.

In questo modo, lo script può funzionare in "un vero modo di script".

Ecco alcuni di riferimento: https://developers.google.com/drive/about-auth https://developers.google.com/accounts/docs/OAuth2InstalledApp?hl=zh-CN

+0

Ciao Grazie per la tua pronta risposta, ho registrato l'app sotto la console cloud. Ho anche l'id del client e la chiave segreta. Non sono sicuro di come utilizzare il token di aggiornamento. di seguito è il codice che ho $ service = new Google_DriveService ($ client); if ($ client-> isAccessTokenExpired()) { $ client-> authenticate(); $ NewAccessToken = json_decode ($ client-> getAccessToken()); $ client-> refreshToken ($ NewAccessToken-> refresh_token); } // Inserisci file –

+0

Ho anche provato l'uso di set access token metodo come questo, $ client-> setAccessToken ('{ "access_token": "ya29.1.AADtN_UffmvD-9MPhjIUKtXyhNOP-IwgvLh48nOSFRIKvC_xdXCXO-Eflb2MY0A-I3RNtQ" , "token_type": "portatore", "expires_in": 3600, "refresh_token": "1/d8x8099NpHVepjut - pYcrGJ8Ebnz13zw_KpIaXy8OI" } '); Ma mi dà errore come client non valido e richiesta errata –

+0

sui dettagli, spero [Aggiunta di file a Google Drive utilizzando PHP] (http://hublog.hubmed.org/archives/001954.html) e [Google Client API con PHP] (http://enarion.net/programming/php/google-client-api/google-client-api-php/) può aiutarti –

1

Io parto dal presupposto il suo solo account unità utente che si sta caricando a. Hai preso in considerazione l'utilizzo di un account di servizio per questo? https://developers.google.com/drive/service-accounts

Se proprio non un singolo account utente che si sta caricando si può solo salvare il token di aggiornamento qualche posto e l'uso che per ottenere una nuova authtoken ogni notte.

+0

Ciao Ho il token di aggiornamento, quando provo a generare il token di autenticazione da esso, ottengo l'errore come Errore durante l'aggiornamento dell'errore token oauth2: client non autorizzato. $ auth_code = $ client-> refreshToken ("1/3EZsybCh1jolk4YMHyQ6LgpiE_zlb4u9R6f0KqjGXMA"); Di seguito è riportato il codice che iam utilizza, $ accessToken = $ client-> autenticarsi ($ auth_code); Per favore fatemi sapere se questo è sbagliato o come posso usare al meglio il token di aggiornamento. Grazie in anticipo –

+0

Si autenticherà solo una volta e questo è quando l'utente dice di sì. Si desidera escludere il token di aggiornamento per un token di accesso. prova questo. $ Client-> refreshToken ("1/3EZsybCh1jolk4YMHyQ6LgpiE_zlb4u9R6f0KqjGXMA"); $ token = $ client-> getAccessToken(); – DaImTo

+0

Il suo stesso errore sotto è il mio codice $ client = new Google_Client(); // Ottieni le credenziali dalla console $ client-> setClientId ('440456931204-q2omnu8fh75n4s4111h503nav60h5gpf.apps.googleusercontent.com'); $ client-> setClientSecret ('eBIztfMNhaBtyMZ8qDMVN7vk'); $ client-> setRedirectUri ('urn: ietf: wg: oauth: 2.0: oob'); $ client-> setScopes (array ('https://www.googleapis.com/auth/drive')); $ service = new Google_DriveService ($ client); $ auth_code = $ client-> refreshToken ("1/3EZsybCh1jolk4YMHyQ6LgpiE_zlb4u9R6f0KqjGXMA"); token $ = $ client-> getAccessToken(); // Inserisci un file –