在我的Google Endpoints项目中,我需要自定义标头,因为我使用自定义身份验证。我在后端(端点代码)执行此操作,如this StackOverflow answer中所述。要在Android客户端上运行,我只需将额外的标头发送到端点服务,如下所示:
Backend.Builder pb = new Backend.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) throws IOException {
HttpHeaders headers = request.getHeaders();
headers.set("authstuff", usernameTxt+"&"+passwdTxt);
request.setHeaders(headers);
}
});
在JavaScript代码中,似乎没有任何方法可以使用gapi.client.load-action发送标头,因此我已经尝试在加载完成后立即发出请求。我已尝试过以下几种版本:
gapi.client.load('backend', 'v1', null, 'http://localhost:8080/_ah/api').then(function () {
gapi.client.request({
root: 'http://localhost:8080/_ah/api',
path: '/backend/v1/',
headers: {'authstuff': 'user&password'}
}).then(function(res) {
console.log(res);
}, function(res) {
console.log(res);
});
});

我在获得404错误后得到的一个想法是将authheader(authstuff)发送到其中一个REST端点(让我们说userinfo / userid可能就是其中之一)。这给了我客户端503服务不可用错误,并且在服务器上,似乎根本不包括authstuff标头。 (换句话说,用/ backend / v1 / userinfo / 1 /替换上面的路径)。
我的问题是真的;你们有没有任何方法可以包含必要的标题,以便上面的StackOverflow链接中的身份验证方式有效?我知道最简单的方法是使用Google帐户,但这不是一个真正的选择。对我来说这似乎很奇怪,在Android Java版本中这很容易,但在javascript中很难。