Ho intenzione di rispondere al n. 1 e al n. 2 potete semplicemente espandere il mio esempio. Seguendo questo esempio Encrypt password with md5 for Shiny-app. è possibile effettuare le seguenti operazioni:
1) Creare 2 pagine e se l'utente immette il nome utente e la password si può renderUI
e utilizzare htmlOutput
per uscita corretta la pagina 2) È possibile lo stile la posizione della casella con nome utente e password con tags
come ho fatto e colorarli se si desidera utilizzare anche tags$style
È quindi possibile esaminare ulteriormente la pagina effettiva e specificare cosa deve essere creato come risultato di utenti diversi. È anche possibile guardare in JavaScript Popup Boxes
EDIT 2018: hanno anche uno sguardo alla esempio qui https://shiny.rstudio.com/gallery/authentication-and-database.html

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))
fonte
2015-03-11 21:21:44
Perché si utilizza '<< -' 'per UTENTE << - reactiveValues (Loggato = Loggato) '? Penso che abbastanza reattivo '<-' – Batanichek
@Batanichek Penso che al momento ho seguito qualche esempio, l'ho cambiato, grazie –
Ciao @Pork Chop, grazie per questo fantastico esempio! Ho funzionato molto bene. Vorrei chiederti se esiste un modo per stampare l'ID quando gli utenti chiudono l'applicazione. Pensavo potessi sapere questo :)? Grazie mille. –