在R Shiny应用程序中返回HTTP状态代码

德文

我有一个R Shiny应用程序,该应用程序根据当前登录的用户加载数据。特定的身份验证方法发生在上游,并在HTTP标头中转发用户ID。

server.R中,我将用户特定的数据用作反应性数据对象,基本上是这样的:

available_data <- reactivePoll(
  intervalMillis = 3600000, # one hour
  session = session,
  checkFunc = function() {
    "" # don't bother invalidating ever
  },
  valueFunc = function() {
    user_id <- fromJSON(as.list(session$request)$HTTP_SHINY_SERVER_CREDENTIALS)$user_id

    if (user_id %in% authorized_users) {
      return(get_data(user_id))
    } else {
      stop(safeError("Not authorized"))
    }
  }
)

然后,我将其available_data()用于数据表,绘图等。这很好。

但是,当列表中的授权用户中user_id 没有一个时,我得到了指定的红色错误消息,代替了表/图。未经授权的用户仍会看到所有导航,选项卡集,非活动内容等。我更愿意做的是只是抢占该页面的所有呈现,并将403状态代码返回给用户的浏览器。我找不到解决办法。

有没有一种方法可以在Shiny应用程序中引发异常,从而完全不呈现UI?

迈克尔·麦卡锡404

我建议使用Shinyjs在所有UI隐藏的情况下启动会话,然后仅在授权用户进行连接时才显示UI。

例如,以下应用仅向登录用户显示用户界面。我用单选按钮代替了授权状态,以简化示例,但是逻辑是相同的。

# ui.R

fluidPage(
  useShinyjs(),
  h1("User Authentication Example"),
  radioButtons("login", "Login:", c("Logged out", "Logged in")),
  div(id = "logged.in.ui",
    p("You are logged in")
  ) %>% shinyjs::hidden()
)

# server.R

library(shinyjs)

function(input, output) {

  # Showing/hiding UI depending on login status.
  observeEvent(input$login, {
    if (input$login == "Logged in") {
      shinyjs::show("logged.in.ui")
    } else {
      shinyjs::hide("logged.in.ui")
    }
  })

}

请注意%>% shinyjs::hidden上述应用程序的UI部分中的。创建会话时以及在服务器中检查登录状态之前,此功能用于使用JavaScript隐藏logging.in.ui div中的所有UI。在服务器中观察到单选按钮的切换,并且login.in.ui div的UI内容根据登录状态显示或隐藏。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在R Shiny应用程序中接受HTTP请求

在 R Shiny 应用程序中更改服务器功能中的 easyButton 状态

如何在R Shiny应用程序中存储反应变量的先前状态?

如何避免在R Shiny应用程序中显示为HTML标题的代码?

R Shiny 应用程序中的外部过滤器

r Shiny应用程序中的URL缩短器

VirtualBox 环境中的 R Shiny 应用程序

无法在R Shiny应用程序中显示模式警报

带R的Shiny应用程序中的相关输入

在 R Shiny 应用程序中嵌入特定推文

在R Shiny应用程序中并排生成UI元素

在R Shiny应用程序中访问Javascript变量

如何在Shiny应用程序中将用户输入作为R代码运行?

如何将一段 R 代码转换为 Shiny 应用程序?

R Shiny 中的本地持久数据存储,供部署的应用程序中的多个用户使用

在R Shiny应用程序中检测Leaflet中的左键或右键单击

错误:R的Shiny应用程序中的“数学函数中的非数值参数”

反应性 R/Shiny 应用程序在其他反应性变量更改后“忘记”变量状态

如何在R Shiny应用程序中包含元标记?

将 instagram/youtube 嵌入到 Shiny R 应用程序中

在 R Shiny 应用程序中渲染 ggplot2 和绘图对象

如何在R Shiny应用程序中更改图标的颜色?

在R Shiny应用程序中同步DataTables的水平滚动条

将附加参数传递给 R Shiny 应用程序中的 moduleServer:访问 updateTabsetPanel 的父环境

基于R Shiny“ html模板”的应用程序中的highcharter集成

R Shiny应用程序中的传单地图图例不显示颜色

R Shiny:在闪亮的应用程序的反应性RMySQL查询中找不到表对象

如何使用htmlOutput在R Shiny应用程序中启用语法突出显示

我可以在R Tools for Visual Studio中运行Shiny应用程序吗