gpt4 book ai didi

r - 输入密码后启动Shiny应用程序

转载 作者:行者123 更新时间:2023-12-02 03:10:58 25 4
gpt4 key购买 nike

我知道Shiny Server Pro中有一个密码控制的功能。问题是Shiny有函数passwordInput(),它就像textInput()有没有人考虑过如何执行以下操作:

1) 输入正确密码后才启动应用程序2)输入正确密码后启动应用程序部分(例如,我在shinydashboard中有一些选项卡,我想仅通过密码访问其中一个选项卡)

谢谢!

最佳答案

编辑 2019: 我们现在可以使用包 shinymanager 来执行此操作:invactivity 脚本将在 2 分钟后使登录页面超时不活动,这样您就不会浪费资源:

library(shiny)
library(shinymanager)

inactivity <- "function idleTimer() {
var t = setTimeout(logout, 120000);
window.onmousemove = resetTimer; // catches mouse movements
window.onmousedown = resetTimer; // catches mouse movements
window.onclick = resetTimer; // catches mouse clicks
window.onscroll = resetTimer; // catches scrolling
window.onkeypress = resetTimer; //catches keyboard actions

function logout() {
window.close(); //close the window
}

function resetTimer() {
clearTimeout(t);
t = setTimeout(logout, 120000); // time is in milliseconds (1000 is 1 second)
}
}
idleTimer();"


# data.frame with credentials info
credentials <- data.frame(
user = c("1", "fanny", "victor", "benoit"),
password = c("1", "azerty", "12345", "azerty"),
# comment = c("alsace", "auvergne", "bretagne"), %>%
stringsAsFactors = FALSE
)

ui <- secure_app(head_auth = tags$script(inactivity),
fluidPage(
# classic app
headerPanel('Iris k-means clustering'),
sidebarPanel(
selectInput('xcol', 'X Variable', names(iris)),
selectInput('ycol', 'Y Variable', names(iris),
selected=names(iris)[[2]]),
numericInput('clusters', 'Cluster count', 3,
min = 1, max = 9)
),
mainPanel(
plotOutput('plot1'),
verbatimTextOutput("res_auth")
)

))

server <- function(input, output, session) {

result_auth <- secure_server(check_credentials = check_credentials(credentials))

output$res_auth <- renderPrint({
reactiveValuesToList(result_auth)
})

# classic app
selectedData <- reactive({
iris[, c(input$xcol, input$ycol)]
})

clusters <- reactive({
kmeans(selectedData(), input$clusters)
})

output$plot1 <- renderPlot({
palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
"#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))

par(mar = c(5.1, 4.1, 0, 1))
plot(selectedData(),
col = clusters()$cluster,
pch = 20, cex = 3)
points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
})

}


shinyApp(ui = ui, server = server)

enter image description here

原帖:我将回答#1,对于#2,您可以简单地扩展我的示例。按照这个例子Encrypt password with md5 for Shiny-app.您可以执行以下操作:

  1. 创建 2 个页面,如果用户输入正确的用户名和密码,您可以 renderUI 并使用 htmlOutput 输出您的页面
  2. 您可以像我一样使用用户名和密码以及标签对框的位置进行样式设置,如果您还想使用tags$style,则可以为它们着色

然后,您可以进一步查看实际页面并指定应根据不同用户的情况创建哪些内容。您还可以查看JavaScript Popup Boxes

编辑 2018: 另请查看此处的示例 https://shiny.rstudio.com/gallery/authentication-and-database.html

Example of front page

rm(list = ls())
library(shiny)

Logged = FALSE;
my_username <- "test"
my_password <- "test"

ui1 <- function(){
tagList(
div(id = "login",
wellPanel(textInput("userName", "Username"),
passwordInput("passwd", "Password"),
br(),actionButton("Login", "Log in"))),
tags$style(type="text/css", "#login {font-size:10px; text-align: left;position:absolute;top: 40%;left: 50%;margin-top: -100px;margin-left: -150px;}")
)}

ui2 <- function(){tagList(tabPanel("Test"))}

ui = (htmlOutput("page"))
server = (function(input, output,session) {

USER <- reactiveValues(Logged = Logged)

observe({
if (USER$Logged == FALSE) {
if (!is.null(input$Login)) {
if (input$Login > 0) {
Username <- isolate(input$userName)
Password <- isolate(input$passwd)
Id.username <- which(my_username == Username)
Id.password <- which(my_password == Password)
if (length(Id.username) > 0 & length(Id.password) > 0) {
if (Id.username == Id.password) {
USER$Logged <- TRUE
}
}
}
}
}
})
observe({
if (USER$Logged == FALSE) {

output$page <- renderUI({
div(class="outer",do.call(bootstrapPage,c("",ui1())))
})
}
if (USER$Logged == TRUE)
{
output$page <- renderUI({
div(class="outer",do.call(navbarPage,c(inverse=TRUE,title = "Contratulations you got in!",ui2())))
})
print(ui)
}
})
})

runApp(list(ui = ui, server = server))

关于r - 输入密码后启动Shiny应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28987622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com