【问题标题】:Username and Password Validation in R Shiny appR Shiny 应用程序中的用户名和密码验证
【发布时间】:2018-01-18 14:37:30
【问题描述】:

我正在构建一个闪亮的登录页面,用户输入用户名和密码并点击登录。

我有一个数据框,其中包含一组登录凭据,其中用户名和相应的密码分别存储在 usernamepassword 列下。

下面是我在server.r中的脚本

reactive({validate(
  need(input$Username == df$username, message = FALSE),
  need(input$Password == df$password, message = FALSE)
       )}) 

现在的问题是我无法验证username 及其对应的password,任何用户名和任何密码都可以登录。请帮助逻辑。

df

    username    password
       admin    admin
        jhon    jhon
        test    test
         ipt    ipt
        rock    rock

【问题讨论】:

  • 这样存储密码是非常糟糕的做法。最好使用 openssl 包比较散列密码和加盐密码。
  • @JoshGilfillan 哦,好的,感谢您的建议,但我该如何实施呢?
  • 使用 openssl 包中的 sha512() 函数来存储散列密码而不是普通密码。然后,当用户输入凭据时,将输入密码的哈希值与存储密码的哈希值进行比较。 sha512() 函数还有一个防止字典攻击的关键参数。
  • @JoshGilfillan,感谢您的解释。我一定会试试的。
  • 或者你可以使用这个shinyproxy.io,但你需要的不仅仅是 R/shiny 编程

标签: r shiny


【解决方案1】:

您可以通过连接和比较来要求用户名和密码匹配。结果字符串。我这里也有散列的密码。

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)
)}) 

【讨论】:

  • @Eumendies ,感谢您的代码。但是代码似乎不起作用。现在验证功能似乎不起作用。虽然没有输入usernamepassword,但用户可以登录。
  • 很遗憾听到这个消息。请您在没有提供用户名和密码的情况下提供paste0(input$Username,"_", sha512(input$Password))的输出吗?
  • 上面写着object input not found
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2013-12-26
相关资源
最近更新 更多