R Shiny Flexdashboard - 看到用户已登录的反应值,如果为空则重定向?

R Shiny Flexdashboard - reactive value to see is a user is logged in, the redirect if null?

我有一个有趣的问题,

我有一个使用 firebase 身份验证登录应用程序的 flexdashboard。登录过程的一部分分配了一个反应值 rv$userName,默认设置为 NULL.

一旦用户成功登录,我就将反应值分配给一个值。但是现在我正在尝试创建一个简单的重定向,以防用户在未登录的情况下访问应用程序的一部分。

我将此代码放在正在呈现并需要登录的页面上方的 Rmd 文件中:


library(flexdashboard)
library(shiny)
library(shinyWidgets)
library(shinydashboard)
library(shinyjs)

renderUI({
  observe({
    if(is.null(rv$userName)){
      tags$script(JS("window.location.href = '/SmartAlpha_Screener.Rmd';"))
      }
  })
})

结果出错:Error: cannot coerce type 'environment' to vector of type 'character'

位置 /SmartAlpha_Screener.Rmd 是应用程序顶部的位置,这不是问题,因为我在应用程序的其他 js 中使用它。

呃,我卡住了..有人知道我做错了什么吗?

干杯, 苏迪

编辑:我想我问的问题是,当一个新的 flexdashboard 页面加载了一个 if 语句时,是否有一种简单的方法来 运行 JS?为了安全起见,我想避免 运行在 JS 中使用 if 语句并将其保留在闪亮的一面。

好的,它开始工作了,

首先,我添加了一些 JS 来处理重定向。

Shiny.addCustomMessageHandler('myRedirect', function(u) {
  if (!u) {
    window.location.href = '/SmartAlpha_Screener.Rmd';
    }
});

之后,我不得不将代码包装在 renderUI 中,以仅将代码保留在该页面上,而不是 运行 整个站点。从那里我使用 shiny 有用的 session$sendCustomMessage 将布尔值传递给 JS 函数。现在,如果有人使用 url 访问该应用程序但未登录,它会将他们重定向到登录页面。

renderUI({
  if(is.null(rv$userName)) {
  observe({
    session$sendCustomMessage("myRedirect", FALSE)
    invalidateLater(1000*60)
    })
  }
})

和 BAM,如果您在未登录的情况下转到某个页面,您将被定向到登录页面。

干杯,

如果您有更好的选择或处理方式,请分享!!