您好,我正在尝试建立一个与API服务联系并验证用户凭据的登录页面。如果凭据正确,则会出现一个新的用户界面,并进行绘制。如果不正确,则在登录屏幕上会显示一条消息,提示“登录错误”。当前,当我尝试在登录页面(ui1.r)中输入任何一个字段时,该字段会在大约一秒钟后刷新/擦除自身,从而阻止了我将用户输入传递给API。我有以下文件
server.r:
rm(list = ls())
library(shiny)
library(dplyr)
library(shinyjs)
umls <- dbConnect(drv=RSQLite::SQLite(),
dbname="/media/sf_umls-2018AA-full/2018AA-full/2018AA/META/umls_browser.sqlite3")
licenseCode <- "mylicense"
shinyServer(function(input, output) {
source('ui1.R') #login page
output$page <- renderUI({ ui1 })
observe({
z<-system(paste("perl", "/media/sf_umls-2018AA-full/2018AA-full/2018AA/META/umls_auth.pl",
input$user, input$password),intern=TRUE)
if (grepl("false",z[22])) {
renderText("incorrect login")
}
if (grepl("true",z[22]))
{
output$page <- renderUI({ ui2 })
output$table <- renderTable({mtcars()})
}
})
})
ui1.r
ui1 <- shinyUI(fluidPage(
# Application title
titlePanel("UMLS Constraint Browser"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
textInput("user", "User",""),
textInput("password", "Password",""),
actionButton("login", "Login")
),
mainPanel(
tableOutput("table")
)
)
))
问题出在哪里?
答案 0 :(得分:0)
我认为问题来自observe
函数。每次您写一封信时,它都会向您的凭证数据库发送一个请求。你应该尝试使用
改为ObserveEvent
:
shinyServer(function(input, output) {
observeEvent(input$login, {
z<-system(paste("perl", "/media/sf_umls-2018AA-full/2018AA-full/2018AA/META/umls_auth.pl",
input$user, input$password),intern=TRUE)
if (grepl("false",z[22])) {
renderText("incorrect login")
}
if (grepl("true",z[22]))
{
output$page <- renderUI({ ui2 })
output$table <- renderTable({mtcars()})
} })
})
在这里,仅当用户单击登录按钮时才发出请求。告诉我它是否适合您。