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))
的输出。它表示
未找到对象输入