[英]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.