2016-03-30 52 views
1

我在AWS「Ubuntu Server 12.04.2」上運行R Studio,並通過瀏覽器訪問R Studio。在沒有瀏覽器的情況下在AWS Ubuntu上驗證Google表格

當我嘗試使用包googlesheets用代碼來驗證谷歌AUTH API: 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)

這裏的問題是,它重定向我的瀏覽器這是本地計算機(基於Windows)。 即使我授權,它也會重定向到「http://localhost:1410/?state=blahblah&code=blahblah」之類的URL。

如何在這種情況下授權Google表格?

我甚至試圖從我的Windows機器上轉移現有的httr-oauth令牌來刪除ubuntu服務器。

回答

0

經過很多人的衝擊之後,我發現支持來自R的HTTP處理和WebSocket請求的軟件包「httpuv」正在產生問題。它迫使R打開網絡瀏覽器。 一旦我卸載了這個包,「googlesheets」給了我一個鏈接,我可以單獨粘貼到瀏覽器中,然後將認證碼粘貼回R服務器。

5

從服務器創建一個gs_auth令牌的最簡單方法是將httr_oob_default選項設置爲true,這會告訴httr使用帶外方法進行身份驗證。您將獲得一個URL並預期會返回一個授權碼。當您設置httr_oob_default選擇是將URI重新定義urn:ietf:wg:oauth:2.0:oob在代碼中看到了oauth-init

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

一件事HTTR一樣。

或者,您可以使用httr命令手動創建.httr-oauth令牌。通過在oauth2.0_token命令中設置use_oob=TRUE來使用帶外驗證模式。

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() 

另一個不那麼優雅,解決方案是創建桌面上的.httr-oauth令牌,然後將該文件複製到服務器。

+0

它真的幫了我很多。謝謝! –

+0

我剛剛發現了這個問題,它解決了在遠程Debian機器上設置類似問題的問題,謝謝@ user1980554。我注意到的一件事是,oauth文件位於'R'的直接操作中,當您在腳本中運行'googlesheets'操作時,您需要確保您位於同一個目錄中。在創建oauth文件之前,我決定'setwd(「/」)',然後在我的腳本中添加'setwd(「/」)',在任何'googlesheets'操作之前。 – rosscova

+0

我一直在處理Google Analytics的類似問題很長時間,在嘗試您的答案後,我忍不住大聲喊出來。謝啦! – agustin

相關問題