This will allow updating the allowed users without restarting the app.
Backwards compatible with providing user_base as a tibble (meaning shinyauthr::runExample() still works).
Example usage using reactiveFileReader where usernames and passwords are stored using csv:
user_base.csv:
user,password,permissions,name
user1,pass1,admin,User One
user2,pass2,standard,User Two
app.R:
library(shiny)
user_base <- reactiveFileReader(1000, NULL, 'user_base.csv', read.csv)
ui <- fluidPage(
# add logout button UI
div(class = "pull-right", shinyauthr::logoutUI(id = "logout")),
# add login panel UI function
shinyauthr::loginUI(id = "login"),
# setup table output to show user info after login
tableOutput("user_table"),
tableOutput("user_table2")
)
server <- function(input, output, session) {
# call login module supplying data frame,
# user and password cols and reactive trigger
credentials <- shinyauthr::loginServer(
id = "login",
data = user_base,
user_col = user,
pwd_col = password,
log_out = reactive(logout_init())
)
# call the logout module with reactive trigger to hide/show
logout_init <- shinyauthr::logoutServer(
id = "logout",
active = reactive(credentials()$user_auth)
)
output$user_table <- renderTable({
# use req to only render results when credentials()$user_auth is TRUE
req(credentials()$user_auth)
credentials()$info
})
# DEBUG
output$user_table2 <- renderTable({
user_base()
})
}
shinyApp(ui = ui, server = server)
This will allow updating the allowed users without restarting the app. Backwards compatible with providing
user_base
as a tibble (meaningshinyauthr::runExample()
still works). Example usage usingreactiveFileReader
where usernames and passwords are stored using csv:user_base.csv
:app.R
: