如果未传入参数,如何阻止闪亮的应用程序 URL
How to block shiny app if a parameter is not passed in URL
我想写一个闪亮的应用程序。这个闪亮的应用程序将用于来自其他应用程序(父应用程序)的分析。
我的父应用程序必须调用这个闪亮的应用程序。我想确保我的闪亮应用程序是从这个父应用程序单独调用的。也就是说,不应使用其 URL.
直接调用它
为此,我正在考虑将密钥与闪亮的 URL 一起传递。在闪亮的应用程序中,我需要进行一个 REST 调用来验证密钥。如果此密钥来自我的父应用程序,则该密钥将有效。如果密钥无效,我需要阻止我闪亮的应用程序的执行。
因此,作为第一步,如果参数不存在,我尝试检查 stopping/blocking 闪亮的应用程序。
我可以使用 session$clientData 读取 http 查询参数。
我尝试使用 validation
进行阻止
这是我的 server.R
shinyServer(function(input, output, session) {
output$data <- reactive({
query <- parseQueryString(session$clientData$url_search)
validate(
need(exists("query$foo"), "Please provide parameter 'foo'")
)
query
})
# Return the components of the URL in a string:
output$urlText <- renderText({
paste(sep = "",
"protocol: ", session$clientData$url_protocol, "\n",
"hostname: ", session$clientData$url_hostname, "\n",
"pathname: ", session$clientData$url_pathname, "\n",
"port: ", session$clientData$url_port, "\n",
"search: ", session$clientData$url_search, "\n"
)
})
})
这是我的 ui.R
shinyUI(bootstrapPage(
h3("URL components"),
verbatimTextOutput("urlText"),
h3("Parsed query string"),
verbatimTextOutput("data")
))
从代码中可以看出,如果不传递查询参数foo,就会显示"Please provide parameter 'foo'"。但连同其他细节。我只想显示带有此警告的页面。我该怎么做?
由于我是 R 和闪亮应用程序的新手,我不确定我的方法是否正确?
您可以尝试使用 renderUI
和 uiOutput
仅在传递查询参数时显示应用程序的其余部分。
这是一个例子:
server.R
shinyServer(function(input, output, session) {
output$shiny_app <- renderUI({
#check if foo was passed, if it is add the UI elements
query <- parseQueryString(session$clientData$url_search)
validate(need(!is.null(query$foo), "Please provide parameter 'foo'"))
plotOutput("plot")
})
#this output will only show if the plotOutput is passed by the previous function
output$plot <- renderPlot({
x <- rnorm(10)
y <- rnorm(10)
plot(x, y)
})
})
ui.R
shinyUI(bootstrapPage(
uiOutput("shiny_app")
)
)
我想写一个闪亮的应用程序。这个闪亮的应用程序将用于来自其他应用程序(父应用程序)的分析。
我的父应用程序必须调用这个闪亮的应用程序。我想确保我的闪亮应用程序是从这个父应用程序单独调用的。也就是说,不应使用其 URL.
直接调用它为此,我正在考虑将密钥与闪亮的 URL 一起传递。在闪亮的应用程序中,我需要进行一个 REST 调用来验证密钥。如果此密钥来自我的父应用程序,则该密钥将有效。如果密钥无效,我需要阻止我闪亮的应用程序的执行。
因此,作为第一步,如果参数不存在,我尝试检查 stopping/blocking 闪亮的应用程序。
我可以使用 session$clientData 读取 http 查询参数。
我尝试使用 validation
进行阻止这是我的 server.R
shinyServer(function(input, output, session) {
output$data <- reactive({
query <- parseQueryString(session$clientData$url_search)
validate(
need(exists("query$foo"), "Please provide parameter 'foo'")
)
query
})
# Return the components of the URL in a string:
output$urlText <- renderText({
paste(sep = "",
"protocol: ", session$clientData$url_protocol, "\n",
"hostname: ", session$clientData$url_hostname, "\n",
"pathname: ", session$clientData$url_pathname, "\n",
"port: ", session$clientData$url_port, "\n",
"search: ", session$clientData$url_search, "\n"
)
})
})
这是我的 ui.R
shinyUI(bootstrapPage(
h3("URL components"),
verbatimTextOutput("urlText"),
h3("Parsed query string"),
verbatimTextOutput("data")
))
从代码中可以看出,如果不传递查询参数foo,就会显示"Please provide parameter 'foo'"。但连同其他细节。我只想显示带有此警告的页面。我该怎么做?
由于我是 R 和闪亮应用程序的新手,我不确定我的方法是否正确?
您可以尝试使用 renderUI
和 uiOutput
仅在传递查询参数时显示应用程序的其余部分。
这是一个例子:
server.R
shinyServer(function(input, output, session) {
output$shiny_app <- renderUI({
#check if foo was passed, if it is add the UI elements
query <- parseQueryString(session$clientData$url_search)
validate(need(!is.null(query$foo), "Please provide parameter 'foo'"))
plotOutput("plot")
})
#this output will only show if the plotOutput is passed by the previous function
output$plot <- renderPlot({
x <- rnorm(10)
y <- rnorm(10)
plot(x, y)
})
})
ui.R
shinyUI(bootstrapPage(
uiOutput("shiny_app")
)
)