我正在尝试实施一个应用程序,该应用程序会提醒用户即将进行的 Google 日历活动。我已经成功创建了 google OAuth 令牌并且我的应用程序运行良好。但突然间我收到此错误“错误:'invalid_grant',error_description:'令牌已过期或撤销。'”。 这是我的代码:
const TOKEN_PATH = 'token.json';
const OAuth2 = google.auth.OAuth2;
const googleConfig = {
clientId: 'xxxxxxxxxxx',
clientSecret: 'xxxxxxxxxxxxxxxx',
redirect: 'xxxxxxxxxxxxxxx/landingPage'
};
function createConnection() {
return new OAuth2(
googleConfig.clientId,
googleConfig.clientSecret,
googleConfig.redirect
);
}
const defaultScope = [
'https://www.googleapis.com/auth/calendar.readonly'
];
function getConnectionUrl(auth) {
return auth.generateAuthUrl({
access_type: 'offline',
prompt: 'consent', // access type and approval prompt will force a new refresh token to be made each time signs in
scope: defaultScope
});
}
function urlGoogle() {
const auth = createConnection(); // this is from previous step
const url = getConnectionUrl(auth);
return url;
}
app.get('/', function (req, res) {
const url = urlGoogle()
return res.render("index", { loginLink: url });
});
app.get('/landingPage', (req, res) => {
const OAuth = createConnection()
function getNewToken(OAuth) {
OAuth.getToken(req.query.code, (err, token) => {
if (err) return console.error('Error retrieving access token', err);
OAuth.setCredentials(token);
fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
if (err) return console.error(err);
console.log('Token stored to', TOKEN_PATH);
callHFunction(OAuth)
});
});
}
// Check if we have previously stored a token.
fs.readFile(TOKEN_PATH, (err, token) => {
if (err) return getNewToken(OAuth);
OAuth.setCredentials(JSON.parse(token));
console.log(OAuth.credentials)
callHFunction(OAuth)
});
res.sendFile(path.join(__dirname, "./landingPage.html"));
});
知道如何解决这个问题吗?
答案 0 :(得分:1)
最常见的原因
<块引用>错误:'invalid_grant'
如果您收到此错误,最好通过提示用户再次授权您的应用程序来确保您的应用程序可以处理它。