栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

输入密码后启动Shiny应用程序(使用Shinydashboard)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

输入密码后启动Shiny应用程序(使用Shinydashboard)

如果我的代码足以使您从“正确的”道路上开始,我会感到好奇。如果不是这种情况,请告诉我。

如果登录名和密码正确,则下面的代码将显示一个闪亮的仪表板。

但需要解决以下问题:

  • CSS中有问题。我认为您需要将登录操作更改的CSS重置为Shinydashboard的更标准配置(当前为全白色)
  • 如果密码错误,则第一个密码
    observe
    将继续在renderUI上“赢得”(带有或没有第二个密码
    observe
    ,严格来说是不必要的,因此消除了),并且永远不会执行与错误登录有关的消息。

您可以尝试多种方法来解决上述问题。

  • 对于CSS,您可以重新设置它,也可以在模式中优雅地登录。
  • 对于第二个,也许您可​​以将所有逻辑带入renderUI调用。这样可以确保所有情况都已执行。

但是请让我知道是否足够清楚。

这是代码:

rm(list = ls())library(shiny)library(shinydashboard)Logged = FALSEmy_username <- "test"my_password <- "test"ui1 <- function() {  tagList(    div(      id = "login",      wellPanel(        textInput("userName", "Username"),        passwordInput("passwd", "Password"),        br(),        actionButton("Login", "Log in")      )    ),    tags$style(      type = "text/css",      "#login {font-size:10px;   text-align: left;position:absolute;top: 40%;left: 50%;margin-top: -100px;margin-left: -150px;}"    )  )}ui2 <- function() {  tagList(dashboardHeader(),          dashboardSidebar(),          dashboardBody("Test"))}ui = (htmlOutput("page"))server = function(input, output, session) {  USER <- reactivevalues(Logged = Logged)  observe({    if (USER$Logged == FALSE) {      if (!is.null(input$Login)) {        if (length(input$Login) > 0) {          Username <- isolate(input$userName)          Password <- isolate(input$passwd)          Id.username <- which(my_username == Username)          Id.password <- which(my_password == Password)          if (length(Id.username) > 0 &   length(Id.password) > 0) { if (Id.username == Id.password) {   USER$Logged <- TRUE }          }        }      }    }  })  output$page <- renderUI({    if (USER$Logged == FALSE) {      do.call(bootstrapPage, c("", ui1()))    } else {      do.call(dashboardPage, #c(inverse=TRUE,title = "Contratulations you got in!",   ui2())    }  })}shinyApp(ui, server)

2017年10月30日更新

似乎上面的代码不再起作用(感谢@ 5249203指出这一点)。

我已经尝试修复它,但是我没有设法使该

do.call
函数正常工作
dashboardBody
(如果有人知道一种方法,请告诉我!)。

因此,由于最近的

shiny
功能,我以另一种方式解决了这个问题。

看看您的想法(当然,像往常一样,解决方案只是需要扩展的模板)。

library(shiny)library(shinydashboard)Logged = FALSEmy_username <- "test"my_password <- "test"ui <- dashboardPage(skin='blue',  dashboardHeader( title = "Dashboard"),  dashboardSidebar(),  dashboardBody("Test",    # actionButton("show", "Login"),  verbatimTextOutput("dataInfo")    ))server = function(input, output,session) {values <- reactivevalues(authenticated = FALSE)# Return the UI for a modal dialog with data selection input. If 'failed' # is TRUE, then display a message that the previous value was invalid.dataModal <- function(failed = FALSE) {  modalDialog(    textInput("username", "Username:"),    passwordInput("password", "Password:"),    footer = tagList(      # modalButton("Cancel"),      actionButton("ok", "OK")    )  )}# Show modal when button is clicked.  # This `observe` is suspended only whith right user credentialobs1 <- observe({  showModal(dataModal())})# When OK button is pressed, attempt to authenticate. If successful,# remove the modal.obs2 <- observe({  req(input$ok)  isolate({    Username <- input$username    Password <- input$password  })  Id.username <- which(my_username == Username)  Id.password <- which(my_password == Password)  if (length(Id.username) > 0 & length(Id.password) > 0) {    if (Id.username == Id.password) {      Logged <<- TRUE        values$authenticated <- TRUE        obs1$suspend()        removeModal()    } else {      values$authenticated <- FALSE    }       }  })output$dataInfo <- renderPrint({  if (values$authenticated) "OK!!!!!"  else "You are NOT authenticated"})}shinyApp(ui,server)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/615283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号