为了访问谷歌地图跟踪API,我有由谷歌的OAuth 2.0授权服务器发送的访问令牌。现在我需要发送这个访问令牌与每一个http请求我做谷歌地图跟踪API。我应该在哪里把这个访问令牌在http请求?我试图把标头作为"X-Access-Token":"myaccesstoken",但我得到了如下api的响应。
body: '{n "error": {n "errors": [n {n "domain": "global",n "reason": "required",n "message": "Login required",n "locationType": "header",n "location": "Authorization"n}n],n "code": 401,n "message": "Login required" n}n}n'}
我参考了谷歌地图跟踪API官方文档https://developers.google.com/maps/documentation/tracks/auth,但无法解决此错误。
下面是我用来与Google的OAuth 2.0授权服务器进行身份验证的代码,以及向Google地图跟踪API发送请求的代码。
var jwt = new googleapis.auth.JWT(client_email, keyFile, null, scopes, null);
jwt.authorize(function(jwtErr, tokens){
if(jwtErr){
return;
}
else{
headers = {
'content-type' : 'application/json',
'X-Access-Token' : tokens.access_token
};
options = {
url : 'https://www.googleapis.com/tracks/v1/geofences/list',
headers : headers,
method : 'POST',
};
request(options, function(error, response, body){
if(error){
return;
}
console.log(response);
});
}
});
找到解决方案后,应放入访问令牌header: {'Authorization': 'myaccesstoken'},因此,修改后的代码将如下所示:
var jwt = new googleapis.auth.JWT(client_email, keyFile, null, scopes, null);
jwt.authorize(function(jwtErr, tokens){
if(jwtErr){
return;
}
else{
headers = {
'content-type' : 'application/json;charset=utf-8',
'content-length': Buffer.byteLength(data),
**'Authorization' : tokens.access_token**
};
options = {
host: 'www.googleapis.com',
path: '/tracks/v1/entities/create',
headers : headers,
method : 'POST',
};
var post_req = https.request(options, function(res){
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' + chunk);
});
});
post_req.on('error', function(error_msg){
console.log(error_msg);
});
post_req.write(data);
post_req.end();
}
});