Flexdashboard闪亮应用程序的Oauth2.0流程

时间:2019-06-19 00:12:34

标签: r shiny oauth-2.0 flexdashboard

我们正在尝试使用Flex Dashboard将OAuth2.0实施到Shiny应用中。 OAuth流当前正在执行,我可以登录并在URL中查看codestate变量。 OAuth服务器重定向到我的应用程序时,它停留在灰色的flexdashboard加载屏幕上。

除了检查我们是否正确执行此操作外,该应用程序是否还应具有OAuth的重定向URL,在该URL中处理令牌?如果是这样,我们将如何配置呢?

我们基本上遵循here的说明。以下是该过程的rmarkdown内容。


    ---
    title: "Question"
    output: 
      flexdashboard::flex_dashboard:
        orientation: rows
        vertical_layout: fill
    fontsize: 12
    runtime: shiny
    ---

    ```{r oauth1}    
    options(shiny.host = '0.0.0.0', shiny.port = 8100, shiny.trace = TRUE)  

    APP_URL <- "https://localhost:8100/"

    if (interactive()) {
       # testing url
       cat(file=stderr(), "starting in interactive mode!")
       APP_URL <- "http://localhost:8100/"
     } else {
       # deployed URL
       cat(file=stderr(), "starting in non-interactive mode!")
       APP_URL <- example_url
    }

    app <- oauth_app("Accounts",
                     key = KEY,# Add key value here
                     secret = SECRET,# Add secret value here
                     redirect_uri = APP_URL
    )

    api <- oauth_endpoint(
      authorize = "https://example_url/oauth/authorize",
      access = "https://example_url/oauth/token"
    )

    scope <- ""

    has_auth_code <- function(params) {
      urlParams = parseQueryString(isolate(session$clientData$url_search))
      browser()
      }

    ```

    ```{r oauth2}
    # Manually create a token
    token <- oauth2.0_token(
        app = app,
        endpoint = api,
        cache = FALSE)
    )
    save(token, file="ox_oauth")

    params <- parseQueryString(isolate(session$clientData$url_search))

    resp <-GET("https://example_url_1/api/user", config(token = token))
    #stop_for_status(resp)

    cat(file=stderr(), "Looking for response")
    cat(file=stderr(), resp)
    ```

    ```{r ui}
    uiFunc <- function(req) {
      cat(file=stderr(), "starting UI function")
      if (!has_auth_code(parseQueryString(req$QUERY_STRING))) {
        url <- oauth2.0_authorize_url(api, app, scope = scope)
        cat(file=stderr(), url)
        redirect <- sprintf("location.replace(\"%s\");", url)
        tags$script(HTML(redirect))
      } else {
        ui
      }
    }
    ```

    ```
    Page 1
    =====================================================================
    row {data-width=800 data-height=100 .tabset .tabset-fade}
    -----------------------------------------------------------------------

    ### Section 1

    ```{r pg1sec1}
    selectizeInput(
        "A_Type",
        label = "Assignment type",
        choices = c("HW", "R"),
        multiple = TRUE,
        # selectize = TRUE,
        options = list(placeholder = "Select assignment type(s)"),
        width = '98%',
        selected = ""
    )
    ```

    ```{r og1sec1.1}
    observeEvent(input$A_Type, {
        x <- input$A_Type
        updateSelectizeInput(session, "A_Type2",
                            selected = x)
    })
    ```
    ```
    Page 2
    =====================================================================
    row {data-width=800 data-height=100 .tabset .tabset-fade}
    -----------------------------------------------------------------------

    ### Section 1

    ```{r pg2sec1}
    selectizeInput(
        "A_Type2",
        label = "Assignment type",
        choices = c("HW", "R"),
        multiple = TRUE,
        width = '98%'
    )
    ```

我们在rmarkdown窗口中获得以下输出:

    Waiting for authentication in browser...
    Press Esc/Ctrl + C to abort
    Please point your browser to the following url: 
        https://example_url/oauth/authorize?client_id=KEY&redirect_uri=XXX%2F&response_type=code&state=XXX

我们希望它在浏览器窗口中打开flexdashboard,它刚好卡在了加载页面上。

0 个答案:

没有答案