【发布时间】:2018-02-25 11:46:50
【问题描述】:
Google People API gapi.client.people.people.connections.list 返回错误 403 并带有错误消息 请求的身份验证范围不足,即使初始化包括所需的范围
gapi.client.init({
apiKey: '***masked***',
discoveryDocs: ["https://people.googleapis.com/$discovery/rest?version=v1"],
clientId: "***masked***.apps.googleusercontent.com",
'scope': "https://www.googleapis.com/auth/contacts.readonly"
});
请求看起来像这样
api.client.people.people.connections.list({
'resourceName': 'people/me',
'personFields': 'names,emailAddresses'
}).then(function (response) {
console.log(response.result.emailAddresses[0].value);
if (importGmailCallback) {
importGmailCallback(response);
}
}, function (reason) {
console.log('Error: ' + reason.result.error.message);
});
在此处等待登录更改
Promise.resolve(window.gapi.auth2.getAuthInstance().signIn()).then(function () {
// Listen for sign-in state changes.
gapi.auth2.getAuthInstance().isSignedIn.listen(googlePeopleSignedInCallback);
// Handle the initial sign-in state.
googlePeopleSignedInCallback(gapi.auth2.getAuthInstance().isSignedIn.get());
}, function (error) {
console.log(error);
});
我在 API Explorer 中成功使用了类似的值,尝试删除访问并重新进行身份验证,删除了所有 cookie,但没有成功
【问题讨论】:
-
您是否确保在发出请求之前等待 init() 响应(这是一个承诺)?示例:developers.google.com/api-client-library/javascript/start/…
-
是的,Promise.resolve(window.gapi.auth2.getAuthInstance().signIn()).then(function () { // 监听登录状态变化。gapi.auth2.getAuthInstance ().isSignedIn.listen(googlePeopleSignedInCallback); // 处理初始登录状态 googlePeopleSignedInCallback(gapi.auth2.getAuthInstance().isSignedIn.get()); }, function (error) { console.log(error) ; });
-
您的应用程序在登录时要求的权限是什么?
-
我的意思是在提示用户允许访问各种谷歌服务的同意屏幕上。通常,此屏幕会在您登录后出现。
标签: javascript google-api google-oauth google-people-api