Как предотвратить использование моего пароля при использовании 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. Мне неуютно, что он показывает мой пароль для любого коллеги в моем офисе в то время, чтобы его увидеть. Я использовал фальшивый пароль, но смотрю на изображение.
. Кроме того, если бы я сохранил рабочее пространство, мой пароль был бы сохранен вместе с ним, и я боюсь, что я дам его кому-то еще, если через несколько месяцев, когда я уже давно забыл о том, что в нем, я отправил свою .RData файл для коллеги.
Я прочитал что-то общее о паролях в R в предыдущем сообщении . Это не дало мне достаточной информации, чтобы скрыть мой пароль при использовании RGoogleDocs.
Ответы
Ответ 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
как насчет двухэтапной аутентификации с конкретным паролем приложения?
вы можете использовать специальный пароль приложения, не раскрывая свой реальный.
и вы можете отменить его, если хотите!