在 Shiny 应用程序中重定向
Redirect in Shiny app
我正在尝试让我的 Shiny 应用程序将用户重定向到另一个页面。我正在使用 httr
发送 GET
请求并查看用户是否已登录。如果他没有登录,我想将他重定向到另一个 link。
我可以仅使用 R / Shiny 来做到这一点,还是我需要一些额外的库?
示例:
library(httr)
library(shiny)
shinyServer(function(input, output) {
rv <- reactiveValues()
rv$mytoken = session$request$token
observeEvent(input$button1, {
rv$a <- GET("my.url:3405/authtoken",
add_headers(
.headers = c("token" = rv$mytoken)
))
if (rv$a$status_code == 200) {
} else {
# redirect magic
}
})
}
shinyUI(fluidPage(
actionButton(button1, "btn")
))
如果不是 true
,这将导航到 google
library(shiny)
jscode <- "Shiny.addCustomMessageHandler('mymessage', function(message) {window.location = 'http://www.google.com';});"
ui <- fluidPage(
tags$head(tags$script(jscode)),
checkboxInput("Redirect","Redirect",value = T)
)
server <- function(input, output, session) {
observeEvent(input$Redirect,{
if(!input$Redirect){
session$sendCustomMessage("mymessage", "mymessage")
}
})
}
shinyApp(ui,server)
刚刚更新。还有一个更简单的方法...
shinyjs::runjs(paste0('window.location.href = "...";'))
不要忘记 UI 中的 useShinyjs()
。
我正在尝试让我的 Shiny 应用程序将用户重定向到另一个页面。我正在使用 httr
发送 GET
请求并查看用户是否已登录。如果他没有登录,我想将他重定向到另一个 link。
我可以仅使用 R / Shiny 来做到这一点,还是我需要一些额外的库?
示例:
library(httr)
library(shiny)
shinyServer(function(input, output) {
rv <- reactiveValues()
rv$mytoken = session$request$token
observeEvent(input$button1, {
rv$a <- GET("my.url:3405/authtoken",
add_headers(
.headers = c("token" = rv$mytoken)
))
if (rv$a$status_code == 200) {
} else {
# redirect magic
}
})
}
shinyUI(fluidPage(
actionButton(button1, "btn")
))
如果不是 true
library(shiny)
jscode <- "Shiny.addCustomMessageHandler('mymessage', function(message) {window.location = 'http://www.google.com';});"
ui <- fluidPage(
tags$head(tags$script(jscode)),
checkboxInput("Redirect","Redirect",value = T)
)
server <- function(input, output, session) {
observeEvent(input$Redirect,{
if(!input$Redirect){
session$sendCustomMessage("mymessage", "mymessage")
}
})
}
shinyApp(ui,server)
刚刚更新。还有一个更简单的方法...
shinyjs::runjs(paste0('window.location.href = "...";'))
不要忘记 UI 中的 useShinyjs()
。