gpt4 book ai didi

r - Shiny 的仪表板,用户身份验证

转载 作者:行者123 更新时间:2023-12-01 08:50:04 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Starting Shiny app after password input

(6 个回答)


去年关闭。




我试图在我发现的代码片段( https://github.com/treysp/shiny_password )中包含一个 Shiny 的仪表板,该代码段将 Shiny 的应用程序包装在函数中以设置用户身份验证。

这个片段与fluidPage()完美配合,但我注意到当我包装dhasboardPage()时它不起作用:我尝试登录,输入我的用户名和密码,点击登录,然后什么也没发生,我被卡住了在登录页面上。我用来通过调用 runApp() 来启动服务器的控制台中没有错误消息

你知道什么可能导致这个特殊问题吗?

提前致谢

最佳答案

这是一个可供您开始的工作示例。这是一个非常基本的实现。

  • 在测试用例中,存储的密码是可见的。您不想以这种方式进行身份验证。这是不安全的。您需要找到一种方法来散列密码并进行匹配。惠东田有线索github link
  • 我实现了大部分ui.r代码在 server.r .不确定是否有解决方法。我注意到的缺点是代码行太多。将每个侧标签分成一个单独的文件会很好。自己还没试过。然而,这里是@Dean Attali 极好的 Shiny 资源 split code

  • ui.r
    require(shiny)
    require(shinydashboard)

    header <- dashboardHeader(title = "my heading")
    sidebar <- dashboardSidebar(uiOutput("sidebarpanel"))
    body <- dashboardBody(uiOutput("body"))
    ui <- dashboardPage(header, sidebar, body)

    server.r
    login_details <- data.frame(user = c("sam", "pam", "ron"),
    pswd = c("123", "123", "123"))
    login <- box(
    title = "Login",
    textInput("userName", "Username"),
    passwordInput("passwd", "Password"),
    br(),
    actionButton("Login", "Log in")
    )

    server <- function(input, output, session) {
    # To logout back to login page
    login.page = paste(
    isolate(session$clientData$url_protocol),
    "//",
    isolate(session$clientData$url_hostname),
    ":",
    isolate(session$clientData$url_port),
    sep = ""
    )
    histdata <- rnorm(500)
    USER <- reactiveValues(Logged = F)
    observe({
    if (USER$Logged == FALSE) {
    if (!is.null(input$Login)) {
    if (input$Login > 0) {
    Username <- isolate(input$userName)
    Password <- isolate(input$passwd)
    Id.username <- which(login_details$user %in% Username)
    Id.password <- which(login_details$pswd %in% Password)
    if (length(Id.username) > 0 & length(Id.password) > 0){
    if (Id.username == Id.password) {
    USER$Logged <- TRUE
    }
    }
    }
    }
    }
    })
    output$sidebarpanel <- renderUI({
    if (USER$Logged == TRUE) {
    div(
    sidebarUserPanel(
    isolate(input$userName),
    subtitle = a(icon("usr"), "Logout", href = login.page)
    ),
    selectInput(
    "in_var",
    "myvar",
    multiple = FALSE,
    choices = c("option 1", "option 2")
    ),
    sidebarMenu(
    menuItem(
    "Item 1",
    tabName = "t_item1",
    icon = icon("line-chart")
    ),
    menuItem("Item 2",
    tabName = "t_item2",
    icon = icon("dollar"))
    )
    )
    }
    })

    output$body <- renderUI({
    if (USER$Logged == TRUE) {
    tabItems(
    # First tab content
    tabItem(tabName = "t_item1",
    fluidRow(
    output$plot1 <- renderPlot({
    data <- histdata[seq_len(input$slider)]
    hist(data)
    }, height = 300, width = 300) ,
    box(
    title = "Controls",
    sliderInput("slider", "observations:", 1, 100, 50)
    )
    )),

    # Second tab content
    tabItem(
    tabName = "t_item2",
    fluidRow(
    output$table1 <- renderDataTable({
    iris
    }),
    box(
    title = "Controls",
    sliderInput("slider", "observations:", 1, 100, 50)
    )
    )
    )
    )
    } else {
    login
    }
    })
    }

    关于r - Shiny 的仪表板,用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44708473/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com