Rhino puts a strong emphasis on modularization and for consistency, even the outermost UI and server are defined as a Shiny module. Unfortunately, this approach is not compatible with the authentication mechanism implemented in polished package.

To overcome this you can setup a legacy entrypoint in your rhino.yml. Please be aware that it is a workaround and not a setting recommended for all cases:

legacy_entrypoint: box_top_level

After adding polished to your dependencies you can use it in app/main.R as follows:

box::use(
  polished,
  shiny,
)

polished$polished_config(
  app_name = "rhino_app", # the name of your application
  api_key = Sys.getenv("API_KEY") # API key obtained from polished.tech
)

#' @export
ui <- polished$secure_ui(
  shiny$fluidPage(
    shiny$fluidRow(
      shiny$column(
        6,
        shiny$h1("Hello Shiny!")
      ),
      shiny$column(
        6,
        shiny$br(),
        shiny$actionButton(
          "sign_out",
          "Sign Out",
          icon = shiny$icon("sign-out-alt"),
          class = "pull-right"
        )
      ),
      shiny$column(
        12,
        shiny$verbatimTextOutput("user_out")
      )
    )
  )
)


#' @export
server <- polished$secure_server(
  function(input, output, session) {
    output$user_out <- shiny$renderPrint({
      session$userData$user()
    })

    shiny$observeEvent(input$sign_out, {
      polished$sign_out_from_shiny()
      session$reload()
    })
  }
)

The guide on how to configure Polished Authentication with your Shiny app can be found here.



Appsilon/rhino documentation built on Sept. 27, 2024, 7:01 p.m.