首页 > 解决方案 > R - 使用 GoogleSignIn 和 ObserveEvent

问题描述

我正在尝试将 Google 登录添加到闪亮的应用程序。我正在使用 googleAuthR 包进行签名,并且我想在用户单击“登录”时触发一些事件。但是,当我单击“登录”按钮时,我没有触发 ObserveEvent。

下面是一个代码示例。当我单击“登录”时,我希望打印出“This works”。

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)

任何帮助,将不胜感激。谢谢!

标签: rshinygoogle-authentication

解决方案


您需要 theobserveEvent以某种方式依赖于sign_ins()响应式,因此observe()with areq()可以实现您的要求。这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)

推荐阅读