В безопасном приложении R Shiny, как сделать так, чтобы onSessionEnded срабатывал только один раз, только когда приложение закрыто? - PullRequest
0 голосов
/ 24 января 2020

Пожалуйста, смотрите код ниже. Я столкнулся с проблемой при запуске блестящего приложения на защищенной странице. Функция «onSessionEnded» срабатывает один раз, когда я захожу в свою учетную запись. И затем он снова срабатывает, когда я закрываю приложение.

Знаете ли вы, как сделать так, чтобы «onSessionEnded» не срабатывал при входе в учетную запись? В идеале «onSessionEnded» должен запускаться только когда приложение закрыто, верно? Кто-нибудь может дать мне несколько советов?

Вы можете запустить код напрямую с именем пользователя: a и паролем: a

library(shiny)
library(shinymanager)

credentials <- data.frame(
  user = c("a", "b"),
  password = c("a", "b"),
  stringsAsFactors = FALSE
)

ui <- fluidPage(
  verbatimTextOutput("auth_output")
)

ui <- secure_app(ui)

lang <- shinymanager:::language$new()
lang$add(
  "Please authenticate" = "Test Page",
  "Username:" = "Username:",
  "Password:" = "Password:",
  "Login" = "Sign in"
)

server <- function(input, output, session) {

  res_auth <- secure_server(
    check_credentials = check_credentials(credentials)
  )

  output$auth_output <- renderPrint({
    reactiveValuesToList(res_auth)
  })

  session$onSessionEnded(function() {
    print("onSessionEnded Run!!!")
  })

}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 24 января 2020

У меня нет представителя, чтобы комментировать ваше сообщение, но я полагаю, что это может быть ответ на этот другой ответ от stackoverflow.

Блестящий сервер - как использовать session $ onSessionEnded ( )

Как это должно быть реализовано в вашем коде:

library(shiny)
library(shinymanager)


credentials <- data.frame(
  user = c("a", "b"),
  password = c("a", "b"),
  stringsAsFactors = FALSE
)

ui <- fluidPage(
  verbatimTextOutput("auth_output")
)

ui <- secure_app(ui)

lang <- shinymanager:::language$new()
lang$add(
  "Please authenticate" = "Test Page",
  "Username:" = "Username:",
  "Password:" = "Password:",
  "Login" = "Sign in"
)

server <- function(input, output, session) {

  users_data <- data.frame(START = Sys.time())

  res_auth <- secure_server(
    check_credentials = check_credentials(credentials)
  )

  output$auth_output <- renderPrint({
    reactiveValuesToList(res_auth)
  })


  session$onSessionEnded(function() {
    users_data$END <- Sys.time()
  })

}

shinyApp(ui, server)

Надеюсь, это поможет

...