在我的node服务器中,我获取用户的gmail收件箱权限,并使用google cloud的pub sub为所有这些权限添加一个监视器。
代码如下:
async addWatcherToGmailInbox({
gmailInboxRefreshToken,
}: {
gmailInboxRefreshToken: string;
}): Promise<boolean> {
const auth = await this.loadAuth(gmailInboxRefreshToken);
const gmail = google.gmail({
version: 'v1',
auth,
});
await gmail.users.watch({
userId: 'me',
requestBody: {
labelIds: ['INBOX'],
topicName: 'projects/<project-name>/topics/<topic-name>',
},
});
return true;
}
但是当用户从我的平台上取消他的gmail帐户时,我首先停止通知,然后撤销令牌。但不知何故,我仍然在我的pub sub subscriber on
事件中收到通知。
停止通知代码:
async removeWatcherFromGmailInbox({
gmailInboxRefreshToken,
}: {
gmailInboxRefreshToken: string;
}): Promise<boolean> {
const auth = await this.loadAuth(gmailInboxRefreshToken);
const gmail = google.gmail({
version: 'v1',
auth,
});
gmail.users.stop({
userId: 'me',
});
return true;
}
我收到通知的发布订阅订阅者事件:
const pubsub = new PubSub({
projectId: <project-name>,
});
this.logger.log('Google Pubsub initialized, fetching topics...');
const subs = await pubsub.getSubscriptions();
const sub = subs[0][0];
// Receive callbacks for new messages on the subscription
sub.on('message', (message) => {
this.logger.log('Received message:', message.data.toString());
const data = JSON.parse(message.data.toString());
});
// Receive callbacks for errors on the subscription
sub.on('error', (error) => {
this.logger.error('Received error:', error);
});
当用户想要撤销令牌时,我缺少什么来停止通知。
注:我确实记录了停止函数的响应。它返回空的body,就像文档中提到的那样。
1条答案
按热度按时间yruzcnhs1#
您可以停止在主题中发布消息,但订阅中仍有消息,PubSub会尝试传递它们,直到确认或消息过期。您也可以purge订阅