我知道在Shiny Server Pro中有一个密码控制的功能。问题是Shiny有passwordInput()函数,这就像textInput()有人想过如何做到以下几点: 1)只有在正确的密码输入后才启动应用程序2)正确的密码输入后启动应用程序的一部分(例如,我在shinydashboard中有一些标签,我想通过密码访问其中一个) 谢谢你,谢谢
---
title: "Old Faithful Eruptions"
output:
flexdashboard::flex_dashboard
runtime: shiny
---
```{r global, include=FALSE}
# load data in 'global' chunk so it can be shared by all users of the dashboard
library(datasets)
library(shinymanager)
data(faithful)
# define credentials
credentials <- data.frame(
user = c("shiny", "shinymanager"),
password = c("123", "12345"),
stringsAsFactors = FALSE
)
# load data in 'global' chunk so it can be shared by all users of the dashboard
library(datasets)
library(shinymanager)
data(faithful)
# define credentials
credentials <- data.frame(
user = c("shiny", "shinymanager"),
password = c("123", "12345"),
stringsAsFactors = FALSE
)
credentials2 <- data.frame(
user = c("shiny", "manager"),
password = c("123", "45678"),
stringsAsFactors = FALSE
)
7条答案
按热度按时间wnrlj8wa1#
**编辑2019:**我们现在可以使用
shinymanager
包来做到这一点:invactivity
脚本将在2分钟的不活动后超时登录页面,这样你就不会浪费资源:字符串
的数据
**原始帖子:**我将回答#1,对于#2,您可以简单地扩展我的示例。按照这个示例Encrypt password with md5 for Shiny-app.,您可以执行以下操作:
1.创建2个页面,如果用户输入正确的用户名和密码,您可以使用
renderUI
和htmlOutput
输出您的页面1.你可以像我一样用
tags
来设计用户名和密码框的位置,如果你也想用tags$style
来给它们上色,然后,您可以进一步查看实际页面,并指定由于不同的用户而应创建的内容。
**编辑2018:**也看看这里的例子https://shiny.rstudio.com/gallery/authentication-and-database.html
的
型
unhi4e5o2#
除了第一个答案,你还可以通过将shinymanager与scrypt包结合来轻松加密你的密码。要做到这一点,你可以首先生成一个密码并对其进行哈希:
字符串
现在,如果我们采用前面的例子,你需要做的就是修改它,使一个对象具有你的散列值(不是原始),并将凭证中的
is_hashed_password
参数设置为TRUE
。您可以访问应用程序(用户名:1),而无需将原始密码存储在脚本中。
型
nwlls2ji3#
我不得不问同样的问题,偶然发现了上面的初始答案(使用两个不同的UI),发现它对我来说太难实现了。显然,SO上有其他用户也有类似的问题来实现上述解决方案。
我使用append/remove tab和{shinyjs}构建了一个更简单的解决方案。下面是它的工作原理。它可能会帮助那些不想使用两个独立UI功能的人。
1.创建一个用户可以登录的登录标签。所有其他标签都还没有显示,侧边栏也没有显示。
1.登录成功后:添加您实际想要显示的标签,删除登录标签(不再需要)并使用{shinyjs}显示侧边栏。
我在下面提供了一个简单的例子。我进一步添加了一些不必要的功能,如用户历史记录计数和限制登录尝试次数,用户日志和消息处理程序等。我注解了这些功能以保持简单,但如果你有兴趣看看。请注意,附加功能必须在服务器上运行。
不使用shiny server pro的唯一缺点是缺少https连接,如果真的有必要,需要使用another work-around添加。
我在GitHub上记录了一个simple example和一个approach with additional features。后者的工作版本可以在shinyapps.io上找到。
下面我发布的应用程序的简单版本的代码专注于登录本身。
登录所需的用户名和密码如下:
字符串
在一个真实的应用程序中,它们应该作为哈希存储在服务器上。
型
x0fgdtte4#
对于闪亮的 Jmeter 板,这可能也有帮助
字符串
wydwbb8l5#
另一种设置密码的简单方法是使用req()并设置特定的密码值:
字符串
r1wp621o6#
要回答有关如何实施上述{flexdashboard}现有方法之一的其他问题,请执行以下操作:
我们可以让{shinymanager}与{flexdashboard}一起工作,遵循这个讨论here。我们需要做的就是添加一些自定义css,这在Rmarkdown中很容易,因为我们可以在设置块之后添加一个css块。
然而,documentation明确警告:
[将{shinymanager}与{flexdashboard}一起使用]并不是一种真正安全的方式,因为用户可以使用开发人员控制台越过身份验证.
Column {.sidebar}
Waiting time between eruptions and the duration of the eruption for the
Old Faithful geyser in Yellowstone National Park, Wyoming, USA.
Column
Geyser Eruption Duration
title: "Old Faithful Eruptions"
output:
flexdashboard::flex_dashboard
runtime: shiny
Page 1
Column {.sidebar}
Waiting time between eruptions and the duration of the eruption for the
Old Faithful geyser in Yellowstone National Park, Wyoming, USA.
Column
Geyser Eruption Duration
Page 2
Column {.sidebar}
Waiting time between eruptions and the duration of the eruption for the
Old Faithful geyser in Yellowstone National Park, Wyoming, USA.
Column
Geyser Eruption Duration
uinbv5nw7#
@Pork Chop的answer非常出色,我只是想简化/使代码更加通用,以便可以确切地看到添加到您的Shiny App中所需的最低要求是什么(因为其他一些答案表明它很难实现)。
下面没有注解的所有内容都需要添加到您的Shiny应用程序中,以便此解决方案工作(它真的很简单):
字符串