【发布时间】:2016-02-23 16:33:48
【问题描述】:
我有以下一段代码,允许用户创建谷歌日历事件。最初,它将检查用户是否设置了访问令牌,如果没有,它将启动常规的 oAuth2 授权过程并在用户配置文件中获取 + 保存访问令牌和刷新令牌。随后的请求将允许用户通过其个人资料中设置的访问令牌创建日历事件。
代码如下:
function getNewToken() {
const authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES
});
return authUrl;
}
module.exports = {
insert(req, res, next) {
User.findById(req.user._id, (err, user) => {
if (user.accessToken) {
oauth2Client.setCredentials({
refresh_token: user.refreshToken
});
const calendar = google.calendar('v3');
calendar.events.quickAdd({ auth: oauth2Client, calendarId: 'primary', text: 'Test Calendar' }, (err, data) => {
if (err) {
next(err);
}
res.status(200).send('Successfully added calendar event');
});
} else {
const authUrl = getNewToken();
res.redirect(authUrl);
}
});
},
googleOauth2Callback(req, res, next) {
const code = req.query.code;
oauth2Client.getToken(code, (err, token) => {
if (err) {
next(err);
}
User.findByIdAndUpdate({ _id: req.user._id }, { accessToken: token.access_token, refreshToken: token.refresh_token }, (err) => {
if (err) {
next(err);
}
});
res.send({ token });
});
}
};
但是,我注意到经过一段时间后,我收到“401 Invalid Credentials”错误。我注意到,如果我省略 access_token 并在 oAuth2Client 中设置刷新令牌,那么一切都会按预期工作。
这是处理 oAuth2 令牌的正确方法吗?我可以继续在我的 API 请求中仅使用刷新令牌吗?刷新令牌过期时会发生什么?任何帮助,将不胜感激。
【问题讨论】:
标签: node.js oauth google-calendar-api