R - Использование GoogleSignIn и ObserveEvent - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь добавить Google Войти в приложение Shiny.Я использую пакет googleAuthR для знака и хочу вызвать некоторые события, когда пользователь нажимает «Войти».Однако я не получаю запуск ObserveEvent при нажатии кнопки «Войти».

Ниже приведен пример кода.Мне нужно распечатать «Это работает», когда я нажимаю «Войти».

library(shiny)
library(googleAuthR)

options(shiny.port=3694)
options(googleAuthR.webapp.client_id = "...")

ui <- fluidPage(

  titlePanel("Sample Google Sign-In"),

  sidebarLayout(
    sidebarPanel(
      googleSignInUI("demo")
    ),

    mainPanel(
      with(tags, dl(dt("Name"), dd(textOutput("g_name")),
                    dt("Email"), dd(textOutput("g_email")),
                    dt("Image"), dd(uiOutput("g_image")) ))
    )
  )
)

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

  sign_ins <- shiny::callModule(googleSignIn, "demo")

  output$g_name = renderText({ sign_ins()$name })
  output$g_email = renderText({ sign_ins()$email })
  output$g_image = renderUI({ img(src=sign_ins()$image) })

  observeEvent(input$demo, {
    print(paste("This works!"))
  })

}

# Run the application 
shinyApp(ui = ui, server = server)

Любая помощь будет признательна.Спасибо!

1 Ответ

0 голосов
/ 21 января 2019

Вам нужно, чтобы observeEvent каким-то образом зависел от реактивного sign_ins(), поэтому observe() с req() позволит достичь того, о чем вы просите.input$demo - это имя модуля, а не вход в модуле, поэтому вы не получите сигнал для работы.Работы ниже:

library(shiny)
library(googleAuthR)

options(googleAuthR.webapp.client_id = "xxx")

ui <- fluidPage(

    titlePanel("Sample Google Sign-In"),

    sidebarLayout(
      sidebarPanel(
        googleSignInUI("demo")
      ),

      mainPanel(
        with(tags, dl(dt("Name"), dd(textOutput("g_name")),
                      dt("Email"), dd(textOutput("g_email")),
                      dt("Image"), dd(uiOutput("g_image")) ))
      )
    )
  )

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

  sign_ins <- shiny::callModule(googleSignIn, "demo")

  output$g_name = renderText({ sign_ins()$name })
  output$g_email = renderText({ sign_ins()$email })
  output$g_image = renderUI({ img(src=sign_ins()$image) })

  observe({
    req(sign_ins()$name)

    print("This works")

  })

}

# Run the application 
shinyApp(ui = ui, server = server)
...