Google 操作 - 使用访问令牌访问日历 API 失败
Google Actions - Access to Calendar API with access token fails
我按照说明 设置了我的应用服务器和 google 操作之间的帐户链接。
在授权过程中,我请求了“https://www.googleapis.com/auth/calendar”范围权限。
我通过调用
设法在我的服务器上获得了授权令牌
app.getUser().accessToken
但是当我向 googleapi 日历发出请求时,使用这段代码:
const google = require('googleapis');
var calendar = google.calendar('v3');
var eventData = {
auth: myAuthToken,
calendarId: 'primary',
resource: {
'summary': 'My Event',
'description': 'Event desc',
'start': {
'dateTime': '2017-06-11',
},
'transparency': 'transparent',
'visibility': 'private',
'colorId': 'blue'
}
};
calendar.events.insert(eventData,
function(err, event) {
if (err) {
console.log(err)
}
});
我得到的是这个错误:
{ Error: Login Required
at Request._callback (\node_modules\google-auth-library\lib\transporters.js:85:15)
at Request.self.callback (\node_modules\request\request.js:188:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (\node_modules\request\request.js:1171:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (\node_modules\request\request.js:1091:12)
at IncomingMessage.g (events.js:291:16)
at emitNone (events.js:91:20)
code: 401,
errors:
[ { domain: 'global',
reason: 'required',
message: 'Login Required',
locationType: 'header',
location: 'Authorization' } ] }
我应该遵循任何额外的身份验证步骤吗?
我认为问题在于您用作 auth
参数的结构不正确。您向它传递一个字符串标记,而它应该是一个 OAuth2 对象。有关详细信息,请参阅 https://github.com/google/google-api-nodejs-client#making-authenticated-requests,但简而言之,您需要:
- 创建一个 OAuth2 对象
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(
YOUR_CLIENT_ID,
YOUR_CLIENT_SECRET,
YOUR_REDIRECT_URL
);
- 设置凭据(访问令牌)。
oauth2Client.setCredentials({
access_token: 'ACCESS TOKEN HERE'
});
- 在事件数据/调用的
auth
参数中使用此 oauth2Client
对象。
var eventData = {
auth: oauth2Client,
...
};
我按照说明
在授权过程中,我请求了“https://www.googleapis.com/auth/calendar”范围权限。
我通过调用
设法在我的服务器上获得了授权令牌app.getUser().accessToken
但是当我向 googleapi 日历发出请求时,使用这段代码:
const google = require('googleapis');
var calendar = google.calendar('v3');
var eventData = {
auth: myAuthToken,
calendarId: 'primary',
resource: {
'summary': 'My Event',
'description': 'Event desc',
'start': {
'dateTime': '2017-06-11',
},
'transparency': 'transparent',
'visibility': 'private',
'colorId': 'blue'
}
};
calendar.events.insert(eventData,
function(err, event) {
if (err) {
console.log(err)
}
});
我得到的是这个错误:
{ Error: Login Required
at Request._callback (\node_modules\google-auth-library\lib\transporters.js:85:15)
at Request.self.callback (\node_modules\request\request.js:188:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (\node_modules\request\request.js:1171:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (\node_modules\request\request.js:1091:12)
at IncomingMessage.g (events.js:291:16)
at emitNone (events.js:91:20)
code: 401,
errors:
[ { domain: 'global',
reason: 'required',
message: 'Login Required',
locationType: 'header',
location: 'Authorization' } ] }
我应该遵循任何额外的身份验证步骤吗?
我认为问题在于您用作 auth
参数的结构不正确。您向它传递一个字符串标记,而它应该是一个 OAuth2 对象。有关详细信息,请参阅 https://github.com/google/google-api-nodejs-client#making-authenticated-requests,但简而言之,您需要:
- 创建一个 OAuth2 对象
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(
YOUR_CLIENT_ID,
YOUR_CLIENT_SECRET,
YOUR_REDIRECT_URL
);
- 设置凭据(访问令牌)。
oauth2Client.setCredentials({
access_token: 'ACCESS TOKEN HERE'
});
- 在事件数据/调用的
auth
参数中使用此oauth2Client
对象。
var eventData = {
auth: oauth2Client,
...
};