Как получить параметр из callModule() в R

#r #shinydashboard #reactive

#r #shinydashboard #реактивный

Вопрос:

Я разрабатываю блестящую панель мониторинга. Мне нужно получить только имя пользователя из модуля входа. Я использую callModule() для выполнения аутентификации панели мониторинга.

Пользовательский интерфейс.R код выглядит следующим образом:

 library(shiny)
library(shinyauthr)
library(shinyjs)
shinyUI(
    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")
)
)
  

Сервер.R код выглядит следующим образом:

 library(shiny)
library(shinyauthr)
library(shinyjs)
library(DBI)
library(RMySQL)
library(dplyr)

# dataframe that holds usernames, passwords and other user data

user_base <- data.frame(
  user = c("user1", "user2"),
  password = c("pass1", "pass2"), 
  permissions = c("admin", "standard"),
  name = c("User One", "User Two"),
  stringsAsFactors = FALSE)

shinyServer(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 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()))

  print(class(credentials))
  # pulls out the user information returned from login module
  user_data <- reactive({credentials()$info})
  #user_name <- reactive({credentials()$user_col})
  print(user_data)

  output$user_table <- renderTable({
    # use req to only render results when credentials()$user_auth is TRUE
    req(credentials()$user_auth)
    user_data()
  })
})
  

Когда я пытаюсь использовать приведенный выше код, я получаю следующий вывод вывод.

Однако я не уверен, что нужно отображать только пользователя, а отображать пароль, разрешения и имя.Есть ли какой-либо способ решить эту проблему?

Ответ №1:

Вы можете легко манипулировать данными, которые хотите отобразить: вот несколько:

  1. user_data возвращает только имя пользователя

user_data <- reactive({credentials()$info[1]}) Поскольку credentials()$info это просто массив символов, вы можете выбрать только первый: имя пользователя

  1. renderTable отображается только имя пользователя: вы можете сделать:

    output$user_table <- renderTable({
    req(credentials()$user_auth)
    user_data()[1]
    })

или

output$user_table <- renderTable({
# use req to only render results when credentials()$user_auth is TRUE
req(credentials()$user_auth)
userData <-user_data()
userData[1]
})

Точно по той же логике, что и в первом случае: в конце user_data это всего лишь некоторый символ, который вы хотите отфильтровать