0

我有一个情节设置为使用AjaxDataSource. 这在我的本地开发中运行良好,并且在我的 Kubernetes 集群中部署时运行良好。但是,在我将 HTTPS 和 Google IAP(身份识别代理)添加到我的绘图应用程序后,对我的数据 URL 的所有请求AjaxDataSource都被 Google IAP 服务拒绝。

过去,我在向受 Google IAP 保护的服务发出其他 AJAX 请求时遇到过这个问题,并通过{withCredentials: true}在我的 axios 请求中进行设置来解决它。但是,在使用 Bokeh 的AjaxDataSource. 如何让 BokehJS 将 cookie 传递给我的服务AjaxDataSource

4

2 回答 2

1

AjaxDataSource可以传递标题

ajax_source.headers = { 'x-my-custom-header': 'some value' }

没有任何方法可以设置 cookie(将在查看器的浏览器上设置......在这种情况下似乎不相关)。这样做需要构建一个自定义扩展。

于 2019-12-03T22:22:57.373 回答
0

感谢 bigreddot 为我指明了正确的方向。我能够构建一个自定义扩展来满足我的需要。这是该扩展的源代码:

from bokeh.models import AjaxDataSource
from bokeh.util.compiler import TypeScript

TS_CODE = """
import {AjaxDataSource} from "models/sources";

export class CredentialedAjaxDataSource extends AjaxDataSource {

    prepare_request(): XMLHttpRequest {
        const xhr = new XMLHttpRequest();
        xhr.open(this.method, this.data_url, true);
        xhr.withCredentials = true;
        xhr.setRequestHeader("Content-Type", this.content_type);

        const http_headers = this.http_headers;
        for (const name in http_headers) {
          const value = http_headers[name];
          xhr.setRequestHeader(name, value)
        }
        return xhr;
    }
}
"""


class CredentialedAjaxDataSource(AjaxDataSource):

    __implementation__ = TypeScript(TS_CODE)

散景扩展文档:https ://docs.bokeh.org/en/latest/docs/user_guide/extensions.html

于 2019-12-19T23:07:40.740 回答