R Shining应用程序中的用户名和密码验证
我正在构建一个闪亮的登录页面,用户在其中输入用户名和密码并点击登录 我有一个数据框,其中有一组登录凭据,其中用户名和相应的密码分别存储在R Shining应用程序中的用户名和密码验证,r,shiny,R,Shiny,我正在构建一个闪亮的登录页面,用户在其中输入用户名和密码并点击登录 我有一个数据框,其中有一组登录凭据,其中用户名和相应的密码分别存储在username、password列下 下面是我在server.r中的脚本 reactive({validate( need(input$Username == df$username, message = FALSE), need(input$Password == df$password, message = FALSE) )})
username
、password
列下
下面是我在server.r中的脚本
reactive({validate(
need(input$Username == df$username, message = FALSE),
need(input$Password == df$password, message = FALSE)
)})
现在的问题是,我无法使用相应的密码验证用户名
,任何带有任何密码的用户名都可以登录。请帮忙解释一下逻辑
df
username password
admin admin
jhon jhon
test test
ipt ipt
rock rock
您可以通过连接用户名和密码并进行比较来要求两者匹配。结果字符串。我也有密码散列在这里
tbl <- read.table(text ="username password
admin admin
jhon jhon
test test
ipt ipt
rock rock",
header= TRUE,
stringsAsFactors = FALSE)
library(openssl)
tbl$password <- sha512(tbl$password)
auths <- apply(tbl, 1, paste, collapse = "_")
reactive({validate(
need(paste0(input$Username,"_", sha512(input$Password)) == auths, message = FALSE)
)})
tbl这样存储密码是非常糟糕的做法。最好使用openssl包来比较散列密码和盐密码。@JoshGilfillan哦,好的,谢谢你的建议,但是我如何实现它呢?使用openssl包中的sha512()函数来存储散列密码,而不是普通密码。然后,当用户输入凭据时,将输入密码的哈希值与存储密码的哈希值进行比较。sha512()函数还有一个防止字典攻击的关键参数。@JoshGilfillan,谢谢您的解释。我一定会试试我们的。或者你可以用这个,但你需要的不仅仅是R/shinyprogramming@Eumendies,谢谢你的代码。但是代码似乎不起作用。现在验证功能似乎不起作用了。用户可以登录,但没有输入用户名
和密码
。听到这个消息我很难过。当没有提供用户名和密码时,请提供paste0(输入$Username,“512;”,sha512(输入$Password))
的输出。它表示未找到对象输入
。