Простая настройка пароля с использованием Shiny Modules - PullRequest
0 голосов
/ 30 июня 2018

Мне удалось установить блестящий пароль приложения после этого решения: Запуск приложения 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)

}

Цените любую помощь с решением или упрощением кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...