无法刷新access_token-Google日历API

时间:2019-06-13 14:14:35

标签: javascript google-calendar-api gapi

问候我的同伴开发人员 我正在一个项目中,客户需要将Google日历与该项目联系起来。 我正在使用GAPI将Google日历与我的应用程序连接。 这是我在做什么:

步骤1:

let config = {
    apiKey: [API_KEY],
    clientId: [CLIENT_ID],
    access_type: 'offline',
    discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest'],
    scope: 'https://www.googleapis.com/auth/calendar.events'
}
gapi.load('client:auth2', () => {
    gapi.client.init(config).then(() => {
        gapi.auth2.getAuthInstance().isSignedIn.listen(true);
    });
});

步骤2:

Promise.resolve(gapi.auth2.getAuthInstance().signIn()).then(response => {
    store access_token, id_token, login_hint
}).then(() => {
    run_different_axios_requests_to_google_calendar();
});

或者如果我已经有访问令牌:

run_different_axios_requests_to_google_calendar();

到此为止,它可以完美运行!

问题出现在访问令牌过期时,请阅读文档,我发现,如果您运行gapi.auth2.getAuthInstance(). grantOfflineAccess()而不是gapi.auth2.getAuthInstance().signIn(),则会得到refresh_tokenaccess_token,{ {1}},id_token,但我没有得到回应,实际上我的承诺表明login_hint,并且我需要在access_token到期时使用刷新令牌,以便我可以获取新令牌,而无需不得不要求用户再次登录(通过Promise)。我不确定我在做什么错!任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

这是Google的complete documentation,可让您使用新的JS库来释放Google Apps的功能。它详细说明了从身份验证到使用GAPI库(如Calendar API)的逐步过程。