Shinyauthr 项目使用教程
1. 项目的目录结构及介绍
Shinyauthr 是一个 R 包,提供了用于向 Shiny 应用程序添加认证层的模块函数。以下是项目的目录结构及各部分功能的简要介绍:
R/
: 包含了 R 语言代码文件,这些文件定义了包的主要功能和模块。inst/
: 存放安装包时使用的文件,例如示例应用程序的代码。man/
: 包含了 Roxygen2 格式的文档,这些文档在构建包时会被转换为用户可查阅的帮助文件。tests/
: 存储了测试代码,确保包的功能按照预期工作。DESCRIPTION
: 包的描述文件,包括包的名称、版本、依赖项和作者信息。NAMESPACE
: 包的命名空间文件,定义了包的导入和导出函数。README.md
: 包的 README 文件,提供了关于包的概述和如何安装的信息。- 其他文件:包括
.gitignore
,.Rbuildignore
,以及可能的许可证文件等。
2. 项目的启动文件介绍
Shinyauthr 包的主要功能是提供认证模块,因此并没有一个传统意义上的“启动文件”。不过,使用该包时通常需要创建一个 Shiny 应用程序,以下是创建基本 Shiny 应用程序的一个示例:
library(shiny)
library(shinyauthr)
# 创建用户数据
user_base <- tibble(
user = c("user1", "user2"),
password = c("pass1", "pass2"),
permissions = c("admin", "standard"),
name = c("User One", "User Two")
)
# 定义 UI
ui <- fluidPage(
# 登出按钮 UI
div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
# 登录面板 UI
shinyauthr::loginUI(id = "login"),
# 用户信息表格输出
tableOutput("user_table")
)
# 定义服务器逻辑
server <- function(input, output, session) {
# 调用登录模块
credentials <- shinyauthr::loginServer(
id = "login",
data = user_base,
user_col = user,
pwd_col = password,
log_out = reactive(logout_init())
)
# 调用登出模块
logout_init <- shinyauthr::logoutServer(
id = "logout",
active = reactive(credentials()$user_auth)
)
# 渲染用户信息表格
output$user_table <- renderTable({
req(credentials()$user_auth)
credentials()$info
})
}
# 运行 Shiny 应用程序
shinyApp(ui = ui, server = server)
这段代码创建了一个包含登录和登出功能的简单 Shiny 应用程序。
3. 项目的配置文件介绍
Shinyauthr 包没有特定的配置文件。不过,在使用过程中,可能需要对 Shiny 应用程序的配置进行调整,比如设置认证信息的存储方式。以下是一个使用 SQLite 数据库存储会话信息的示例:
library(shiny)
library(dplyr)
library(lubridate)
library(DBI)
library(RSQLite)
# 连接 SQLite 数据库
db <- if (file.exists("my_db_file")) {
dbConnect(SQLite(), "my_db_file")
} else {
dbConnect(SQLite(), "my_db_file")
dbCreateTable(db, "sessionids", c(
user = "TEXT",
sessionid = "TEXT",
login_time = "TEXT"
))
}
# 会话信息过期天数
cookie_expiry <- 7
# 添加会话 ID 到数据库
add_sessionid_to_db <- function(user, sessionid, conn = db) {
tibble(
user = user,
sessionid = sessionid,
login_time = as.character(now())
) %>%
dbWriteTable(conn, "sessionids", ., append = TRUE)
}
# 从数据库获取会话 ID
get_sessionids_from_db <- function(conn = db, expiry = cookie_expiry) {
dbReadTable(conn, "sessionids") %>%
mutate(login_time = ymd_hms(login_time)) %>%
as_tibble() %>%
filter(login_time > now() - days(expiry))
}
这段代码演示了如何连接到 SQLite 数据库,并提供了两个函数:add_sessionid_to_db
用于在用户登录时保存会话信息,get_sessionids_from_db
用于获取有效的会话信息。这些函数可以与 Shinyauthr 包的认证模块一起使用,实现基于 cookies 的认证。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考