- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何根据使用 shinymanager
输入的凭据使用 shinyjs 禁用功能?
在下面的示例中,我向凭据添加了一个 level
字段,如果用户级别大于零,我想禁用 extraOutput
。但是应用程序崩溃并出现错误:Operation not allowed without an active reactive context.
library(shiny)
library(shinymanager)
library(shinyjs)
# define some credentials
credentials <- data.frame(
user = c("shiny", "shiny2"), # mandatory
password = c("111", "111"), # mandatory
start = c("2015-04-15"), # optinal (all others)
expire = c(NA, "2032-12-31"),
admin = c(FALSE, TRUE),
comment = "Simple and secure authentification mechanism
for single ‘Shiny’ applications.",
stringsAsFactors = FALSE,
moreInfo = c("someData1", "someData2"),
level = c(2, 0)
)
ui <- fluidPage(
shinyjs::useShinyjs(),
tags$h2("My secure application"),
verbatimTextOutput("auth_output"),
verbatimTextOutput("extraOutput")
)
# Wrap your UI with secure_app
ui <- secure_app(ui)
server <- function(input, output, session) {
# call the server part
# check_credentials returns a function to authenticate users
res_auth <- secure_server(
check_credentials = check_credentials(credentials)
)
if(reactiveValuesToList(res_auth)$level > 0) disable(output$extraOutput)
output$auth_output <- renderPrint({
reactiveValuesToList(res_auth)
})
output$extraOutput <- renderPrint({
print("extra output based on level")
})
# your classic server logic
}
shinyApp(ui, server)
编辑------------------------
我设法用变量 shinymanager_where
做到了,但我觉得这是一个 hack,所以我会留下问题以获得更好的答案。
ui <- fluidPage(
shinyjs::useShinyjs(),
tags$h2("My secure application"),
verbatimTextOutput("auth_output"),
actionBttn(
"extraOutput",
label = "testButtonDisabled",
icon = NULL,
style = "unite",
color = "default",
size = "md",
block = FALSE,
no_outline = TRUE
)
)
# Wrap your UI with secure_app
ui <- secure_app(ui)
server <- function(input, output, session) {
# call the server part
# check_credentials returns a function to authenticate users
res_auth <- secure_server(
check_credentials = check_credentials(credentials)
)
observeEvent(input$shinymanager_where, {
if(input$shinymanager_where == "application"){
print(reactiveValuesToList(res_auth))
print(reactiveValuesToList(res_auth)$level)
if(reactiveValuesToList(res_auth)$level > 0){
shinyjs::disable("extraOutput")
}
}
})
output$auth_output <- renderPrint({
reactiveValuesToList(res_auth)
})
observeEvent(input$extraOutput,{
print("extra output based on level")
})
# your classic server logic
}
shinyApp(ui, server)
最佳答案
将凭据放入 react 值中。然后它可以重新用于应用基于凭据作为输入参数的初始 UI 设置
library(shiny)
library(shinymanager)
library(shinyjs)
# define some credentials
credentials <- data.frame(
user = c("shiny", "shiny2"), # mandatory
password = c("111", "111"), # mandatory
start = c("2015-04-15"), # optinal (all others)
expire = c(NA, "2032-12-31"),
admin = c(FALSE, TRUE),
comment = "Simple and secure authentification mechanism
for single ‘Shiny’ applications.",
stringsAsFactors = FALSE,
moreInfo = c("someData1", "someData2"),
level = c(2, 0)
)
ui <- fluidPage(
shinyjs::useShinyjs(),
tags$h2("My secure application"),
verbatimTextOutput("auth_output"),
verbatimTextOutput("extraOutput")
)
# Wrap your UI with secure_app
ui <- secure_app(ui)
server <- function(input, output, session) {
# call the server part
# check_credentials returns a function to authenticate users
res_auth <- secure_server(
check_credentials = check_credentials(credentials)
)
# Create reactive values including all credentials
creds_reactive <- reactive({
reactiveValuesToList(res_auth)
})
# Hide extraOutput only when condition is TRUE
observe({
if (!is.null(creds_reactive()$level) && creds_reactive()$level > 0) shinyjs::hide("extraOutput")
})
output$auth_output <- renderPrint({
reactiveValuesToList(res_auth)
})
output$extraOutput <- renderPrint({
print("extra output based on level")
})
# your classic server logic
}
shinyApp(ui, server)
关于r - 如何根据 shinymanager 凭据禁用 Shiny 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61806386/
我想在用户单击按钮时显示注销和身份验证屏幕。 credentials <- data.frame( user = "x", password = "x" ) library(shiny) li
很抱歉再次问这个问题,但我确实需要解决这个问题(即将达到我在shinyapps.io 上的最大数据限制)。这是我上一个问题的链接Previous Stack Question这是我的演示应用程序的链接
我试图用脚本中的 html 代码更改 R 中 shinymanager 登录页面中的文本,但它不起作用。例如,我想通过“usuario”更改用户名和框架的颜色。有谁知道该怎么做?谢谢,这是我的代码。
我有一个 Shiny 的应用程序,我正在使用 Shiny 管理器包来处理用户身份验证。我正在尝试从我的 www/文件夹中添加一张图片作为身份验证背景。这是一个工作示例。 当您运行该应用程序时,您当前会
如何根据使用 shinymanager 输入的凭据使用 shinyjs 禁用功能? 在下面的示例中,我向凭据添加了一个 level 字段,如果用户级别大于零,我想禁用 extraOutput。但是应用
我是一名优秀的程序员,十分优秀!