我在使用Google Cloud PubSub API时遇到了一些问题。最近,我开始使用Cloud PubSub为我正在处理的聊天服务器排队消息。来自PubSub订阅的消息将使用socket.io节点库转发给用户。我没有遇到这个设置问题 - 我运行我的node.js服务器,打开几个浏览器窗口,我可以毫无问题地聊天。
但是,我注意到,经常在服务器运行几个小时后,它开始吐出以下错误:
(node:2525) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
(node:2525) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
...
(node:2525) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1253): Error: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential...
此错误重复并重复(您可以在错误消息中看到递增的rejection id
),直到几分钟后停止并恢复正常工作。当我收到错误消息时,我无法通过Cloud PubSub发送任何消息。
这是设置监听器的代码:
function listenForMessages(handler)
{
var pubsub = require('@google-cloud/pubsub')({
projectId: config.pubsub_project_id,
keyFilename: config.pubsub_keyfile
});
pubsub.subscribe(config.pubsub_topic, 'test-subscription', {autoAck: true}, function(err, subscription){
subscription.on('message', function(message) {
handler(message.data);
});
});
}
凭据来自外部配置文件 - 我非常确定它们没问题,特别是考虑到我最初运行服务器时设置监听器没有问题。
TL; DR:我开始收到"无效的凭据"在我开始运行使用Google Cloud PubSub对邮件进行排队的节点服务器几个小时后重复出错。
答案 0 :(得分:1)
我遇到了同样的问题,终于找到了解决方案。问题是google令牌过期,因此pubsub订阅者引发了异常。 github中已经存在一个类似oauth问题的错误。 (Link)
此问题已在node-pubsub 0.20.0版中修复,升级到此版本将解决您的问题。实际的解决方法是在google-auth-library-nodejs
version 2.0中,而node-pubsub:v0.20.0
使用google-auth-library-nodejs:2.0
。
摘自google-auth-library-nodejs:2.0
的github发行说明:
OAuth2.refreshAccessToken方法已被弃用。的 getAccessToken,getRequestMetadata和请求方法将全部 如果需要自动刷新令牌。永远都不需要 手动刷新令牌。
希望这会有所帮助!