Google Mapsengine对服务帐户的权限响应不足

时间:2014-06-12 19:24:31

标签: node.js google-maps google-oauth google-maps-engine

我正在尝试在地图引擎中为Google地图创建表格。我已将服务帐户添加到mapsengine管理面板中的地图访问列表中,并为其指定了“可以编辑”权限。我还在项目的开发者控制台中给了它编辑权限。

这是我发送的用于发送回令牌的访问令牌的地方:

    var googleapis = require('googleapis');
    function connect() {
        var authClient = new googleapis.auth.JWT(
            '216755859529-1s2o9qofhd9ea65ang9clpd1936ldfcr@developer.gserviceaccount.com',
            '../bin/googleoauth2.pem',
            'notasecret',
            ['https://www.googleapis.com/auth/mapsengine'],
            // User to impersonate (leave empty if no impersonation needed)
            ''
        );

        authClient.authorize(function(err, tokens) {
             if (err) {
             console.log(err);
             return;
        }
         else {
             console.log(tokens);
        }

        googleapis.discover('mapsengine', 'v1').execute(function (err, client) {
             if (err) {
                 console.log('Problem during the client discovery.', err);
                 return;
             }
             createNewTable();
             client.mapsengine.tables.create(mapengine_table_body).withAuthClient(authClient).execute(function (err, response) {
            if (err) {
                console.log(err);
                return;
            } else {
                console.log(response);
                return;
            }
        });

    });
  });
}

这是我创建表并发送它的地方:

function createNewTable() {

   mapengine_table_body = {
  "projectId": projectID,
  "name": "World Famous Mountains",
  "description": "A partial list of famous mountains in the world.",
  "draftAccessList": "Map Editors",
  "tags": [
    "mountain",
    "high places"
  ],
  "schema": {
    "columns": [
      {
        "name": "geometry",
        "type": "points"
      },
      {
        "name": "mountain_name",
        "type": "string"
      },
      {
        "name": "height",
        "type": "integer"
      }
    ]
  }
 }
}
function start() {

    'use strict';
    var pck, program;

    pck = require('../package.json');
    program = require('commander');

    program
        .version(pck.version)
        .option('-r, --run', 'Run')
        .parse(process.argv);

    console.log('running:');
         if (program.run) {
         connect();
    }
}

我在查看项目时从网址获取的ProjectId。我查看了尽可能多的文档,但我无法弄清楚这一点。感谢。

1 个答案:

答案 0 :(得分:0)

如果没有您的错误回复,我无法给您一个确切的答案,但这里有几个指示。

  1. 检查执行块中err的内容。 API将在err.errors中返回一些内容,以解释问题所在,如果它出现在API端。
  2. 目前尚不清楚mapengine_table_body变量的范围是什么,请在调用connect()后尝试在createNewTable()调用中正确记录,以确保您拥有实际数据。
  3. googleapis.auth.JWT构造函数中的第三个参数(至少根据this)是密钥密码,它是提供内联实际密钥的另一种方法(如反对在参数#2中使用文件位置。
  4. Maps Engine中的项目ID可能看起来很大,但在JavaScript中将它们视为大数字很可能会导致舍入,这意味着您为API提供的代码与代码中的数字不同。为防止这种情况发生,请确保您的项目ID是“引用的”,以便将其视为字符串。
  5. 希望这里有所帮助!如果没有,请分享建议#1的输出。