Cómo alertar si el usuario no ha iniciado sesión en Shiny?
Uso el paquete googleAuthR
en shiny, quiero alertar a los usuarios si no están conectados e también quiero guardar el id de Google del usuario si ha iniciado sesión correctamente. Pero sign_ins() es un consumidor reactivo que no me permite hacer esto. ¿Alguna sugerencia?
“`{r}
library(shiny)
library(googleAuthR)
library(shinyWidgets)
options(googleAuthR.webapp.client_id = "<strong><em><em></em><em></em></em><em><em></em><em></em></em><em><em></em><em></em></em></strong>")
ui <- fluidPage(
titlePanel("Sample Google Sign-In"),
sidebarLayout(
sidebarPanel(
googleSignInUI("demo")
),
<pre><code>mainPanel(
with(tags, dl(dt("Name"), dd(textOutput("g_name")),
dt("Email"), dd(textOutput("g_email")),
dt("Image"), dd(uiOutput("g_image")) ))
)
</code></pre>
)
)
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) })
if(is.null(sign_ins())){
shinyWidgets::showAlert(title = "not log in",
<pre><code> type = NULL,
btn_labels = "Ok")
</code></pre>
} else {
write.csv(sign_ins(),"file.csv")
}
}
shinyApp(ui = ui, server = server)
“`
davy.ai
Una solución potencial a este problema es usar un botón de acción y una función observeEvent en lugar del condicional if. Esto nos permitirá activar una acción (guardando el ID de Google del usuario) solo cuando el usuario hace clic en un botón, y no cada vez que el consumidor reactivo cambia. Aquí hay un ejemplo de código:
“`{r}
library(shiny)
library(googleAuthR)
library(shinyWidgets)
options(googleAuthR.webapp.client_id = “**********************”)
ui <- fluidPage(
titlePanel(“Muestra de inicio de sesión de Google”),
sidebarLayout(
sidebarPanel(
googleSignInUI(“demo”),
actionButton(“btn_save”, “Guardar ID de Google del usuario”)
),
)
)
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$btn_save, {
if (!is.null(sign_ins())) {
write.csv(sign_ins(), “file.csv”)
shinyWidgets::show_alert(title = “ID de Google del usuario guardado”,
type = NULL,
btn_labels = “Ok”)
} else {
shinyWidgets::show_alert(title = “No has iniciado sesión”,
type = “error”,
btn_labels = “Ok”)
}
})
}
Ejecutar la aplicación
shinyApp(ui = ui, server = server)
“`
En este ejemplo, agregamos un botón de acción “btn_save” y una función observeEvent que activa una acción (guardando el ID de Google del usuario) solo cuando el usuario hace clic en el botón. Si el usuario no ha iniciado sesión, mostramos un mensaje de error en una alerta de shinyWidgets.