2016-03-30 14 views
1

Ich verwende R Studio auf einem AWS "Ubuntu Server 12.04.2" und rufe über meinen Browser R Studio auf.Google-Tabellen auf AWS Ubuntu ohne Browser authentifizieren

Wenn ich versuche, Google Auth API unter Verwendung des Paket googlesheets mit dem Code zur Authentifizierung: gs_auth(token = NULL, new_user = FALSE, key = getOption("googlesheets.client_id"), secret = getOption("googlesheets.client_secret"), cache = getOption("googlesheets.httr_oauth_cache"), verbose = TRUE)

Das Problem hier ist, dass es leitet mich Browser, der die lokalen Maschine (Windows-basierte). Auch wenn ich es autorisiere, leitet es zu einer URL wie "http://localhost:1410/?state=blahblah&code=blahblah" um.

Wie autorisiere ich Google-Blätter in einem solchen Fall?

Ich habe sogar versucht, vorhandene HTR-OAUTH-Token von meinem Windows-Rechner zu entfernen, um Ubuntu-Server zu entfernen.

Antwort

0

Nach viel Kopfknall, fand ich, dass ein Paket "httpuv", das HTTP-Behandlung und WebSocket-Anfragen von R unterstützt, das Problem verursachte. Es zwang R, den Webbrowser zu öffnen. Sobald ich dieses Paket deinstalliert habe, gab "googlesheets" mir einen Link, den ich im Browser getrennt einfügen und dann den Auth-Code wieder in R-Server einfügen konnte.

5

Die einfachste Möglichkeit, ein Token gs_auth von einem Server zu erstellen, besteht darin, die Option httr_oob_default auf true zu setzen. Dadurch wird httr angewiesen, die Out-of-Band-Methode für die Authentifizierung zu verwenden. Sie erhalten eine URL und erwarten, dass Sie einen Autorisierungscode zurückgeben.

library(googlesheets) 
options(httr_oob_default=TRUE) 
gs_auth(new_user = TRUE) 
gs_ls() 

Eine Sache HTTR tut, wenn Sie setzen die httr_oob_default Option ist die URI zu urn:ietf:wg:oauth:2.0:oob neu zu definieren, wie in dem Code für oauth-init gesehen.

Alternativ können Sie ein Token .httr-oauth manuell mithilfe von HTR-Befehlen erstellen. Verwenden Sie den Out-of-Band-Authentifizierungsmodus, indem Sie use_oob=TRUE im Befehl oauth2.0_token festlegen.

library(googlesheets) 
library(httr) 

file.remove('.httr-oauth') 

oauth2.0_token(
    endpoint = oauth_endpoints("google"), 
    app = oauth_app(
    "google", 
    key = getOption("googlesheets.client_id"), 
    secret = getOption("googlesheets.client_secret") 
    ), 
    scope = c(
    "https://spreadsheets.google.com/feeds", 
    "https://www.googleapis.com/auth/drive"), 
    use_oob = TRUE, 
    cache = TRUE 
) 

gs_ls() 

Eine andere, weniger elegante Lösung ist die .httr-oauth Token auf Ihrem Desktop zu erstellen und kopieren Sie die Datei auf einem Server.

+0

Es hilft mir wirklich sehr. Vielen Dank! –

+0

Ich habe das gerade gefunden, und es hat meine Probleme gelöst, etwas ähnliches auf einem entfernten Debian-Rechner einzurichten, danke @ user1980554. Eine Sache, die mir aufgefallen ist, ist, dass die oauth-Datei in "R" arbeitet und Sie sicherstellen müssen, dass Sie sich in demselben Verzeichnis befinden, wenn Sie eine "googlesheets" -Aktion in einem Skript ausführen. Ich entschied mich, 'setwd ("/") vor dem Erstellen der oauth-Datei, dann' setwd ("/") in meinen Skripten, kurz vor jeder 'googlesheets'-Aktionen. – rosscova

+0

Ich habe mich so lange mit einem ähnlichen Problem für Google Analytics beschäftigt, dass ich nach dem Ausprobieren Ihrer Antwort nicht umhin konnte, laut zu schreien. Danke, Mann! – agustin