使用 Bokeh AjaxDataSource 发出认证请求
Making credentialed requests with Bokeh AjaxDataSource
我有一个情节设置使用AjaxDataSource
。这在我的本地开发中运行良好,并且在我的 Kubernetes 集群中部署时运行良好。但是,在我将 HTTPS 和 Google IAP(身份识别代理)添加到我的绘图应用程序后,所有对我的 AjaxDataSource
的数据 url 的请求都被 Google 应用内购服务。
我过去 运行 遇到过这个问题,其他 AJAX 请求 Google IAP 保护的服务,并通过在我的 axios 中设置 {withCredentials: true}
解决了这个问题要求。但是,我在使用 Bokeh 的 AjaxDataSource
时没有这个选项。如何让 BokehJS 将 cookie 传递到 AjaxDataSource
中的我的服务?
AjaxDataSource
可以pass headers:
ajax_source.headers = { 'x-my-custom-header': 'some value' }
无法设置 cookie(将在查看者的浏览器上设置……在这种情况下似乎不相关)。这样做需要构建自定义扩展。
感谢 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
我有一个情节设置使用AjaxDataSource
。这在我的本地开发中运行良好,并且在我的 Kubernetes 集群中部署时运行良好。但是,在我将 HTTPS 和 Google IAP(身份识别代理)添加到我的绘图应用程序后,所有对我的 AjaxDataSource
的数据 url 的请求都被 Google 应用内购服务。
我过去 运行 遇到过这个问题,其他 AJAX 请求 Google IAP 保护的服务,并通过在我的 axios 中设置 {withCredentials: true}
解决了这个问题要求。但是,我在使用 Bokeh 的 AjaxDataSource
时没有这个选项。如何让 BokehJS 将 cookie 传递到 AjaxDataSource
中的我的服务?
AjaxDataSource
可以pass headers:
ajax_source.headers = { 'x-my-custom-header': 'some value' }
无法设置 cookie(将在查看者的浏览器上设置……在这种情况下似乎不相关)。这样做需要构建自定义扩展。
感谢 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