【发布时间】:2018-01-10 15:29:04
【问题描述】:
注销按钮(actionbutton)在以下脚本中不起作用。我需要知道为什么它不起作用?以及如何解决?
仅供参考:当我从代码中取出USER$Logged <- FALSE 时,按钮可以工作,但我无法再登录,因为Logged 仍然是TRUE。
欣赏!
用户界面
ui2 <- function(){
tagList(tabPanel(""),
pageWithSidebar(
headerPanel(
""
),
sidebarPanel
(
actionButton("logout", "Logout")
),
mainPanel(tableOutput('aaa'))
)
)
}
ui1 <- function(){
tagList(h2("Hello", align = "center"),
div(id = "login",
wellPanel(textInput("userName", "Username"),
passwordInput("passwd", "Password"),
br(),actionButton("Login", "Log in"),
)
}
服务器
server = (function(input, output,session) {
USER <- reactiveValues(Logged=FALSE)
observe({
if (USER$Logged == FALSE) {
if (!is.null(input$Login)) {
if (input$Login > 0) {
Username <- isolate(input$userName)
Password <- isolate(input$passwd)
query <- sprintf({"
SELECT rowid
FROM users
WHERE username='%s' and password ='%s'"},
Username, Password, serialize=F)
db <- RSQLite::dbConnect(RSQLite::SQLite(), dbname="db.sqlite")
user <- RSQLite::dbGetQuery(db, query)
RSQLite::dbDisconnect(db)
if ( length(user$rowid)==1 ) {
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 = paste("Welcome", isolate(input$userName)," !"),ui2())))})
print(ui)
}
})
observeEvent(input$logout, {
output$page <- renderUI({div(class="outer",do.call(bootstrapPage,c("",ui1())))})
USER$Logged <- FALSE
})
})
生成小型数据库:
library(shiny)
library(RSQLite)
setwd("E:/shiny/Correct")
db <- dbConnect(SQLite(), dbname="db.sqlite")
dbSendQuery(conn = db,"CREATE TABLE users (username TEXT, password TEXT, email TEXT)")
dbSendQuery(db, "INSERT INTO users ( username, password, email) VALUES ( 'ester', 'silva', 'abc@gmail.com');")
【问题讨论】: