library(badger) # git_repo <- "systats/shinyuser" # cat( # #badge_travis(git_repo), # #"[![Codecov test coverage](https://codecov.io/gh/favstats/peRspective/branch/master/graph/badge.svg)](https://codecov.io/gh/favstats/peRspective?branch=master)", # badge_code_size(git_repo), # badge_last_commit(git_repo), # badge_lifecycle("experimental", "blue") # )
This is a demonstration of how to implement user authentication directly in a shiny app. The core idea is to provide a simple, secure and modularized solution.
Features:
bcrypt
for password encrypton
Minimal example of shinyuser
library(tidyverse) library(shiny) library(shinyjs) library(shiny.semantic) library(semantic.dashboard) library(shinyuser) library(openssl) library(bcrypt) ui <- function(){ dashboardPage( dashboardHeader( inverted = T, login_ui("user"), div(class = "ui circular icon button action-button", id = "user-logout", icon("power off") ) ), dashboardSidebar( side = "left", size = "", inverted = T, sidebarMenu( div(class = "item", h4(class = "ui inverted header", "Something") ) ) ), dashboardBody( div(class = "sixteen wide column", "Something great content" ) ) ) } server <- function(input, output) { users <- reactive({ dplyr::tibble(name = "admin", pw = bcrypt::hashpw("test")) }) user <- callModule(login_server, "user", users) observeEvent(user(), { observe(print(user())) }) } shinyApp(ui, server)
devtools::document() devtools::install()
users <- dplyr::tibble(name = c("admin", "admin2"), email = name, pw = bcrypt::hashpw("test")) %>% glimpse .name = "admin" .email = "" .pw = "test" bcrypt::checkpw(password = .pw, hash = users$pw[2]) known <- users %>% #glimpse %>% dplyr::filter(name == .name | email == .email) %>% # glimpse %>% dplyr::filter(bcrypt::checkpw(password = .pw, hash = pw)) %>% glimpse # & #(), # ) glimpse(known)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.