Мне удалось установить блестящий пароль приложения после этого решения:
Запуск приложения Shiny после ввода пароля (с Shinydashboard)
Теперь, я только что общался с блестящими модулями, поэтому я начал задаваться вопросом, можно ли использовать модули для создания простого в настройке модуля паролей, который я мог бы внедрить в другие приложения, которыми я владею. (Я использую модуль только потому, что узнал об этом. Это можно сделать с помощью обычных функций).
Это мое текущее рабочее решение:
##This part of the module is going to set modal's UI
passwordModuleUI=function(id,failed=FALSE){
ns=NS(id)
tagList(
modalDialog(
textInput(ns("username"), "Usuário:"),
passwordInput(ns("password"), "Senha:"),
footer = tagList(
# modalButton("Cancel"),
actionButton(ns("ok"), "OK")
)
)
)
}
#This will load modal UI from observer inside the server
passwordModuleShow=function(ID){
showModal(passwordModuleUI(ID))
}
#This is server side module
passwordModuleEval=function(input,output,session,id,users,passwords){
authenticated <- FALSE
isolate({
Username <- input$username
Password <- input$password
})
Id.username <- which(users == Username)
Id.password <- grep(Password,passwords)
if ((length(Id.username) > 0&nchar(Password)>1) & (length(Id.password) > 0)&nchar(Username)>1) {
if (Id.username %in% Id.password) {
authenticated <- TRUE
removeModal()
} else {
authenticated <- FALSE
}
}
return(authenticated)
}
#This is trying to simplify implementation in shiny apps
setupPassProtection=function(input,output,session,ID,Users,Passwords){
obs1=observe(priority = 1,{
passwordModuleShow(ID=ID)
})
observeEvent(input[[paste0(ID,"ok",sep="-")]],{
if(callModule(passwordModuleEval,ID,users=Users,passwords=Passwords))
{obs1$suspend()}
})
}
my_username=my_password="test"
ui=basicPage(h3("testando passprotect module"))
server=function(input,output,session){
passID="test"
obs1=observe(priority = 1,{
passwordModuleShow(ID=passID)
})
observeEvent(input[[paste0(passID,"-ok")]],{
if(callModule(passwordModuleEval,"test",users=my_username,passwords=my_password))
{obs1$suspend()}
})
}
shinyApp(ui,server)
Я бы хотел, чтобы следующий сервер работал, так как это самая простая и удобочитаемая версия, и я мог бы легко найти другие функции.
Это НЕ работает:
server=function(input,output,session){
setupPassProtection(input,output,session,ID="test",Users=my_username,Passwords=my_password)
}
Цените любую помощь с решением или упрощением кода.