2017-08-10 131 views
1

我正在構建一個閃亮的登錄頁面,其中用戶輸入用戶名和密碼並點擊登錄。R中的用戶名和密碼驗證Shiny app

我有一個數據幀,其中用戶名和相應的密碼分別存儲在usernamepassword列下的登錄憑據組。

下面是我在server.r

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

腳本現在的問題是,我不能夠與其對應的password驗證username,用任何密碼的用戶名可以登錄。請幫助你的邏輯。

df

username password 
     admin admin 
     jhon jhon 
     test test 
     ipt ipt 
     rock rock 
+0

存儲這樣的密碼是非常糟糕的做法。最好使用openssl軟件包比較哈希和醃製密碼。 –

+0

@JoshGilfillan哦好吧,感謝您的建議,但我該如何實現? – SBS

+1

使用openssl包中的sha512()函數來存儲粗體密碼而不是普通密碼。然後,當用戶輸入憑證時,將輸入密碼的散列值與存儲密碼的散列值進行比較。 sha512()函數還有一個防止字典攻擊的關鍵參數。 –

回答

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

@Eumendies,謝謝你的代碼。但代碼似乎不起作用。現在驗證功能似乎沒有工作。用戶可以登錄,但沒有輸入用戶名和密碼。 – SBS

+0

我很抱歉聽到這個消息。當沒有提供用戶名和密碼時,請提供'paste0(輸入$用戶名,「_」,sha512(輸入$密碼))'的輸出? – Eumenedies

+0

它表示'找不到對象輸入'。 – SBS