es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
“`

Tags:  , ,

Answer

  1. Avatar for 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”)
    ),

    mainPanel(
      with(tags, dl(dt("Nombre"), dd(textOutput("g_name")),
                    dt("Correo electrónico"), dd(textOutput("g_email")),
                    dt("Imagen"), 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$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.

Comments are closed.