【问题标题】:Redirect in Shiny app在闪亮的应用程序中重定向
【发布时间】:2017-11-07 12:21:28
【问题描述】:

我正在尝试让我的 Shiny 应用程序将用户重定向到另一个页面。我正在使用httr 发送GET 请求并查看用户是否已登录。如果他没有,我想将他重定向到另一个链接。

我可以只使用 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")
))

【问题讨论】:

  • 能否提供带有用户名和密码的示例代码?
  • 它以不同的方式工作:我在session$request 环境中有身份验证令牌,我检查GET 是否在服务器上相同。因此,我根据收到的状态代码重定向用户。如果需要,我会提供一些代码
  • 没有它你仍然可以提供示例应用程序,所以当false 然后重定向
  • 一个例子就足够了吗?

标签: r redirect shiny httr


【解决方案1】:

如果不是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)

【讨论】:

  • 像往常一样,你让它工作:)我正在寻找的东西,谢谢!似乎您“强制”它重定向用户。 Shiny 默认不支持这种行为吗?
  • ui 中很容易做到,您可以在其中绑定按钮和链接,但您需要从服务器发回重定向,shiny 团队添加了sendCustomMessage,这非常有用.所以只要通过它,你会很快拿起它
  • 看看paste
  • 是的,我的错,我现在就处理它。再次感谢。
  • 我只使用了window.top.location.href 而不是window.location,效果很好。和平!
【解决方案2】:

只是为了更新。还有一种更简单的方法...

shinyjs::runjs(paste0('window.location.href = "...";'))

不要忘记 UI 中的useShinyjs()

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2017-01-27
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2016-06-02
    • 2016-02-03
    相关资源
    最近更新 更多