簡體   English   中英

R Shiny Flexdashboard - 查看用戶是否登錄的反應值,如果 null?

[英]R Shiny Flexdashboard - reactive value to see is a user is logged in, the redirect if null?

我有一個有趣的問題,

我有一個使用 firebase 身份驗證登錄到應用程序的 flexdashboard。 登錄過程的一部分分配一個反應值rv$userName ,默認情況下設置為NULL

用戶成功登錄后,我將反應值分配給一個值。 但是現在我正在嘗試創建一個簡單的重定向,以防用戶在未登錄的情況下訪問應用程序的一部分。

我將此代碼放在正在呈現並需要登錄的頁面上方的 Rmd 文件中:


library(flexdashboard)
library(shiny)
library(shinyWidgets)
library(shinydashboard)
library(shinyjs)

renderUI({
  observe({
    if(is.null(rv$userName)){
      tags$script(JS("window.location.href = '/SmartAlpha_Screener.Rmd';"))
      }
  })
})

結果是一個錯誤: Error: cannot coerce type 'environment' to vector of type 'character'

位置/SmartAlpha_Screener.Rmd是應用程序頂部的位置,這不是問題,因為我在應用程序的其他 js 中使用它。

呃,我被卡住了..有人知道我做錯了什么嗎?

干杯,索迪

編輯:我想我要問的問題是當一個新的 flexdashboard 頁面加載了 if 語句時,是否有一種簡單的方法來運行 JS? 為了安全起見,我想避免在 JS 中運行 if 語句並將其留在 shiny 端。

好的,讓它工作,

首先,我添加了一些 JS 來處理重定向。

Shiny.addCustomMessageHandler('myRedirect', function(u) {
  if (!u) {
    window.location.href = '/SmartAlpha_Screener.Rmd';
    }
});

之后,我不得不將代碼包裝在renderUI中,以僅將代碼保留在該頁面上,而不是在整個站點上運行。 從那里我使用了閃亮的有用session$sendCustomMessage將 boolean 傳遞給 JS function。 現在,如果有人使用 url 訪問該應用程序並且沒有登錄,它會簡單地將他們重定向到登錄頁面。

renderUI({
  if(is.null(rv$userName)) {
  observe({
    session$sendCustomMessage("myRedirect", FALSE)
    invalidateLater(1000*60)
    })
  }
})

和 BAM,如果您在未登錄時 go 到一個頁面,您將被定向到登錄頁面。

干杯,

如果您有更好的選擇或處理方式,請分享!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM