Подтвердить что ты не робот

Как предотвратить использование моего пароля при использовании RGoogleDocs?

Мне нравится RGoogleDocs и использовать его много. Тем не менее, мне не нравится вводить мой пароль все время. Очевидно, я мог бы просто ввести пароль в R script и ему никогда не придется вводить его снова. Но это нежизнеспособно, так как это означает, что мой пароль останется незашифрованным на моем жестком диске. Кроме того, я разделяю свои сценарии с коллегами.

Чтобы обойти проблему, я придумал это.

if(exists("ps")){
  print("got password, keep going")
} else {
  ps <-readline(prompt="get the password in ")
}

options(RCurlOptions = list(
  capath = system.file("CurlSSL", "cacert.pem", 
  package = "RCurl"), ssl.verifypeer = FALSE)
)

sheets.con = getGoogleDocsConnection(
  getGoogleAuth("[email protected]", ps, service ="wise")) 

#WARNING: this would prevent curl from detecting a 'man in the middle' attack
ts2=getWorksheets("hpv type",sheets.con)

Мне нравится использовать RStudio. Мне неуютно, что он показывает мой пароль для любого коллеги в моем офисе в то время, чтобы его увидеть. Я использовал фальшивый пароль, но смотрю на изображение. my password would be in plain view for all to see in RStudio. Кроме того, если бы я сохранил рабочее пространство, мой пароль был бы сохранен вместе с ним, и я боюсь, что я дам его кому-то еще, если через несколько месяцев, когда я уже давно забыл о том, что в нем, я отправил свою .RData файл для коллеги.

Я прочитал что-то общее о паролях в R в предыдущем сообщении . Это не дало мне достаточной информации, чтобы скрыть мой пароль при использовании RGoogleDocs.

4b9b3361

Ответ 1

Мой подход - установить имя и пароль для входа в список опций R в файле запуска R .Rprofile. Тогда мой код получает значение с getOption(), а затем значение никогда не отображается и не сохраняется в переменной верхнего уровня в globalenv(). (Это может быть полезно, если один отлаживает посмертную отладку через dump.frames).

Очень важно, чтобы .Rprofile не мог быть прочитан кем-либо другим, кроме вас.

Итак,

options(GoogleDocsPassword = c(login = 'password'))

в .Rprofile, а затем

auth = getGoogleAuth()

просто работает, поскольку значением по умолчанию для первого параметра является поиск опции GoogleDocsPassword.

Д.

Ответ 2

У меня была такая же проблема, и никакого реального решения. Обходной путь, который я использую, я создаю учетную запись google только для этой цели, с паролем, который мне неинтересен. Затем я передаю документы, которые я хочу получить R с этой учетной записью.

Но если у кого-то есть ответ на начальный вопрос, меня тоже интересует.

Ответ 3

Кажется, что вы можете хранить пароль в своих опциях, а вместо "ps" напрямую использовать "getOption". Однако существуют лучшие решения.

Ответ 4

Вы можете сохранить пароль в файле на вашем компьютере, закодированном и все, и назовите его с чем-нибудь вроде

getPassword < - function (файл = местоположение файла паролей) {unencode (readLines (файл))}

установите это в свой .Rprofile и используйте в коде

GetPassword().

Это не сохраняет ваш пароль в любых файлах R и вы можете создавать проверки в файле.

Ответ 5

Если вы действительно не хотите его хранить в любом месте, одно из решений этого - не использовать переменную для пароля, возможно, даже для адреса учетной записи google! Основываясь на связанном ответе, почему бы не попробовать

library(tcltk)
library(RGoogleDocs)

getHiddenText <- function(label = "Enter text:", symbol = "*", defaultText = ""){  
    wnd <- tktoplevel()
    entryVar <- tclVar(defaultText)  
    tkgrid(tklabel(wnd, text = label))
    #Entry box
    tkgrid(entryBox <- tkentry(wnd, textvariable = entryVar, show = symbol))
    #Hitting return will also submit text
    tkbind(entryBox, "<Return>", function() tkdestroy(wnd))
    #OK button
    tkgrid(tkbutton(wnd, text="OK", command=function() tkdestroy(wnd)))
    #Wait for user to submit  
    tkwait.window(wnd)
    return(tclvalue(entryVar))
}  

repeat {
    con <- try(getGoogleDocsConnection(getGoogleAuth(
        getHiddenText(
            label = "Enter google account:",
            symbol = "", # or set to "*" to obscure email entry
            defaultText = "@gmail.com"), # a little timesaver
        getHiddenText(
            label = "Enter password:",
            symbol = "*",
            defaultText = ""),
        service = "wise")))
    if (inherits(con, "try-error")) {
        userResponse <- tkmessageBox(
            title = "Error",
            message = "Couldn't connect to Google Docs. Try again?",
            icon = "error", type = "yesno")
        if (tclvalue(userResponse) == "no") {
            stop("Unable to connect to Google Docs, user cancelled.")
        }        
    } else { # connection successfully authenticated
        break() # so escape the repeat loop
    }
}

Ответ 6

Для таких вещей я разделяю документ google с составленным адресом электронной почты, создаю учетную запись google и затем использую ее для совместного использования и авторизации. Таким образом, разделяя мои личные данные для входа в систему, из чего необходимо выполнить script.

Ответ 7

как насчет двухэтапной аутентификации с конкретным паролем приложения? вы можете использовать специальный пароль приложения, не раскрывая свой реальный. и вы можете отменить его, если хотите!