#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:
Вы можете легко манипулировать данными, которые хотите отобразить: вот несколько:
user_data
возвращает только имя пользователя
user_data <- reactive({credentials()$info[1]})
Поскольку credentials()$info
это просто массив символов, вы можете выбрать только первый: имя пользователя
-
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
это всего лишь некоторый символ, который вы хотите отфильтровать