Аутентификация листов google на AWS Ubuntu без браузера

Я запускаю R Studio на AWS «Ubuntu Server 12.04.2» и получаю R Studio через мой браузер.

Когда я пытаюсь аутентифицировать API google auth с помощью пакетов googlesheets с кодом: 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). Даже если я разрешаю это, он перенаправляет URL-адрес, например « http: // localhost: 1410 /? State = blahblah & code = blahblah ».

Как разрешить googlesheets в таком случае?

Я даже попытался передать существующий токен httr-oauth с моей машины Windows, чтобы удалить сервер ubuntu.

Самый простой способ создания маркера gs_auth с сервера – установить для параметра httr_oob_default значение true, что позволит httr использовать внеполосный метод аутентификации. Вам будет предоставлен URL-адрес и ожидается, что он вернет код авторизации.

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

Одна вещь, которую httr делает, когда вы устанавливаете параметр httr_oob_default – это переопределить URI для urn:ietf:wg:oauth:2.0:oob как показано в коде для oauth-init .

Кроме того, вы можете вручную создать .httr-oauth с помощью команд httr. Используйте режим аутентификации вне диапазона, установив use_oob=TRUE в команде oauth2.0_token .

 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 на вашем рабочем столе и последующее копирование файла на сервер.

После многих ударов по голове я обнаружил, что проблема создания пакета «httpuv», который поддерживает обработку HTTP и запросы WebSocket от R, создает проблему. Это заставило R открыть веб-браузер. Как только я удалил этот пакет, «googlesheets» дал мне ссылку, которую я мог бы вставить в браузере отдельно, а затем вставить код auth обратно в R-сервер.