使用 Google Cloud Endpoints JavaScript 客户端时在 HTTP 请求中包含 cookie

Include cookies in HTTP requests when using the Google Cloud Endpoints JavaScript client

我目前正在使用 Google 云端点生成的 Java 脚本客户端对我的后端进行 API 调用。问题是我的页面的 cookie 没有被添加到 HTTP 请求中。如何将 Gitkit gtoken cookie 添加到我的请求中。

我已经在后端配置 Google Cloud Endpoints 以允许 cookie。 auth = @ApiAuth(allowCookieAuth = AnnotationBoolean.TRUE)

我的端点如下所示。

@ApiMethod(path = "user-account")
public UserAccount get(HttpServletRequest httpRequest) {

    GitkitUser gitkitUser = Gitkit.validate(httpRequest); // returns null

    Cookie[] cookies = httpRequest.getCookies();
    log.severe("# of cookies: " + cookies.length);
    for (Cookie cookie : cookies) {
       log.severe("cookie name: " + cookie.getName());
        log.severe("cookie value: " + cookie.getValue()); 
    }

    /*
     * Logs 1 for # of cookies, with a cookie name of "G_ENABLED_IDPS" 
     * a value of "google". No gtoken cookie, even though I have 
     * checked and there is one!
     */

    ...

}

我正在使用 Google Cloud Endpoints JS 客户端进行调用。

gapi.client.myApi.userAccountResource.get().execute(function (resp){
    ...
});

我需要做些什么来确保 Endpoints JS 客户端在其请求中包含 gtoken cookie 吗?

你最好添加cookies存储+请求的截图headers并创建一个plunker/jsfiddle/jsbin重现问题。

有可能 cookie 未设置或未发送到服务器。您需要定位问题所在。如果它是由浏览器通过网络发送的,那么问题出在服务器端。如果它在 cookie 存储中但未发送,则为客户端问题。如果它不在存储中,那么就没有什么可发送的,找出它们为什么根本不在客户端是一个不同的问题。

您可以在浏览器的开发工具中查看 cookie 和请求 headers。是的,如果未过期并匹配主机和路径前缀,cookie 将自动发送。