我爱RGoogleDocs并且经常使用它。但是,我不喜欢一直输入密码。显然我可以在R脚本中输入密码,而不必再次输入密码。但这不可行,因为这意味着我的密码将在我的硬盘上保持未加密状态。此外,我与同事分享我的脚本。
为了解决这个问题,我提出了这个问题。
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("notreal@gmail.com", ps, service ="wise"))
#WARNING: this would prevent curl from detecting a 'man in the middle' attack
ts2=getWorksheets("hpv type",sheets.con)
我喜欢使用RStudio。当我看到办公室里的任何同事显示我的密码时,我感到很不舒服。我使用了假密码,但看看图像。 。此外,如果我保存了一个工作区,我的密码会随之保存,如果几个月之后,当我很久以前忘记了它的内容时,我担心我会把它交给别人,我发送了我的.RData向同事提交。
我在earlier post中阅读了关于R中密码的一般信息。在使用RGoogleDocs时,它没有给我足够的信息来隐藏我的密码。
答案 0 :(得分:23)
我的方法是设置登录名和&amp; R选项列表中的密码
在R启动文件.Rprofile
内。然后我的代码获取值
使用getOption()
然后该值永远不可见或存储
在globalenv()
中的顶级变量中。 (如果
一个人通过dump.frames
)进行事后调试。
至关重要的是.Rprofile
除了你以外的任何人都无法阅读。
所以
options(GoogleDocsPassword = c(login = 'password'))
在.Rprofile
然后
auth = getGoogleAuth()
只是作为第一个参数的默认值工作,即查找GoogleDocsPassword
选项。
d
答案 1 :(得分:7)
我有同样的问题,没有真正的解决方案。我使用的解决方法是,我为此目的创建了一个谷歌帐户,密码是我不关心的。然后,我分享了我希望R使用该帐户访问的文档。
但如果有人对我最感兴趣的初步问题有答案。
答案 2 :(得分:3)
好像你会将密码存储在你的选项中而不是“ps”直接使用“getOption”。可是有更好的解决方案。
答案 3 :(得分:3)
您可以将密码存储在计算机上的一个文件中,编码完毕并使用类似
之类的内容进行调用getPassword&lt; - function(file =密码文件的位置){ unencode (readLines(file))}
在.Rprofile中设置它并在代码中使用
getPassword来()。
这不会将您的密码存储在任何R文件中,您可以在文件中内置检查。
答案 4 :(得分:3)
如果你真的不想将它存储在任何地方,那么一个解决方案就是不要使用变量作为密码,甚至可能是谷歌帐户地址!在linked answer的基础上,为什么不尝试
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
}
}
答案 5 :(得分:2)
对于这样的事情,我与谷歌文档共享一个电子邮件地址,创建一个谷歌帐户,然后用它来共享和授权。因此,将我的个人登录详细信息与脚本运行所必需的内容分开。
答案 6 :(得分:0)
使用应用专用密码进行2步认证怎么办? 您可以使用特定于应用程序的密码,而无需透露真实密码。 如果你愿意,你可以撤销它!