Google Cloud PubSub: la suscripción previamente válida no está autorizada de repente

Estoy teniendo algunos problemas con la API de Google Cloud PubSub. Recientemente, comencé a usar Cloud PubSub para poner en cola los mensajes de un servidor de chat en el que estoy trabajando. Los mensajes procedentes de una suscripción a PubSub se reenvían a los usuarios mediante la biblioteca de nodos socket.io. No tengo problemas para configurar esto: ejecuto mi servidor node.js, abro un par de ventanas del navegador y puedo chatear sin problemas.

Sin embargo, me he dado cuenta de que, a menudo, después de que el servidor se haya estado ejecutando durante algunas horas, comienza a escupir el siguiente error:

(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...

Este error se repite y se repite (puede ver el rejection id en aumento en el mensaje de error) hasta que se detiene unos minutos más tarde y las cosas vuelven a funcionar. Mientras recibo los mensajes de error, no puedo enviar ningún mensaje a través de Cloud PubSub.

Aquí está el código que configura el oyente:

 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); }); }); } 

Las credenciales provienen de un archivo de configuración externo. Estoy bastante seguro de que están bien, especialmente dado que no hay problemas para configurar la escucha cuando ejecuto el servidor por primera vez.

TL; DR: comienzo a recibir un error de “credenciales no válidas” repetidamente unas horas después de comenzar a ejecutar un servidor de nodo que utiliza Google Cloud PubSub para poner en cola los mensajes.

Estaba enfrentando el mismo problema y finalmente encontré la solución. El problema era que el token de Google se había vencido y, por lo tanto, el suscriptor de pubsub lanzaba la excepción. Ya había un error en github para un problema similar auth. ( Enlace )

El problema se solucionó en la versión 0.20.0 de node-pubsub y la actualización a esta versión solucionará el problema. La solución real estaba en google-auth-library-nodejs versión 2.0 y node-pubsub:v0.20.0 usa google-auth-library-nodejs:2.0 .

De las notas de lanzamiento de github de google-auth-library-nodejs:2.0 :

El método OAuth2.refreshAccessToken ha quedado en desuso. Los métodos getAccessToken, getRequestMetadata y request actualizarán el token si es necesario automáticamente. No hay necesidad de actualizar manualmente el token.

Espero que esto ayude !!

    Intereting Posts