代码之家  ›  专栏  ›  技术社区  ›  firmo23

使用闪亮的用户身份验证方法子集数据帧

  •  1
  • firmo23  · 技术社区  · 6 年前

    下面我有一个闪亮的应用程序,它使用用户身份验证逻辑。如您所见,首先创建一个数据帧时使用:

    # dataframe that holds usernames, passwords and other user data
    user_base <- data.frame(
      user = c("user1", "user2","user1"),
      password = c("pass1", "pass2","pass1"), 
      permissions = c("admin", "standard","admin"),
      name = c("User One", "User Two","User One"),
      stringsAsFactors = FALSE)
    

    从这个数据框中,用户使用 user password 以获取登录应用程序的密码。如你所见,我可以登录到应用程序中,只使用 user2 凭据为 user1 user_base 基于用户名和密码,我将使用,但现在我可以看到,如果我有多行与相同的用户名,这不起作用。另外一个问题是,如果可以跳过密码,让用户只使用用户名登录。

    library(shiny)
    library(shinyauthr)
    library(shinyjs)
    
    # dataframe that holds usernames, passwords and other user data
    user_base <- data.frame(
      user = c("user1", "user2","user1"),
      password = c("pass1", "pass2","pass1"), 
      permissions = c("admin", "standard","admin"),
      name = c("User One", "User Two","User One"),
      stringsAsFactors = FALSE)
    
    ui <- fluidPage(
      # must turn shinyjs on
      shinyjs::useShinyjs(),
      # add logout button UI 
      div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
      # add login panel UI function
      shinyauthr::loginUI(id = "login"),
      # setup table output to show user info after login
      tableOutput("user_table")
    )
    
    server <- function(input, output, session) {
    
      # call the logout module with reactive trigger to hide/show
      logout_init <- callModule(shinyauthr::logout, 
                                id = "logout", 
                                active = reactive(credentials()$user_auth))
    
      # call login module supplying data frame, user and password cols
      # and reactive trigger
      credentials <- callModule(shinyauthr::login, 
                                id = "login", 
                                data = user_base,
                                user_col = user,
                                pwd_col = password,
                                log_out = reactive(logout_init()))
    
      # pulls out the user information returned from login module
      user_data <- reactive({credentials()$info})
    
      output$user_table <- renderTable({
        # use req to only render results when credentials()$user_auth is TRUE
        req(credentials()$user_auth)
        user_data()
      })
    }
    
    shinyApp(ui = ui, server = server)
    
    0 回复  |  直到 6 年前