web-push icon indicating copy to clipboard operation
web-push copied to clipboard

Getting 401 Error on my Remote Server but the same code is working fine on my Local Machine

Open sahilnare opened this issue 4 years ago • 0 comments
trafficstars

Setup

Operating System: <Linux> Node Version: <12.20.0> web-push Version: <3.4.5>

Please select any browsers that you are experiencing problems with:

  • [ ] Chrome
  • [ ] Firefox

Problem

I'm using Node.js and MongoDB. I'm getting the following error when I use web-push on my DigitalOcean server: When I send notification to a Firefox Client, I get the following error:

WebPushError: Received unexpected response code at IncomingMessage.<anonymous> (/home/sahilnare78/apps/Hola_Peeps_New_Design/node_modules/web-push/src/web-push-lib.js:347:20) at IncomingMessage.emit (events.js:326:22) at IncomingMessage.EventEmitter.emit (domain.js:483:12) at endReadableNT (_stream_readable.js:1241:12) at processTicksAndRejections (internal/process/task_queues.js:84:21) { statusCode: 401, headers: { 'access-control-allow-headers': 'content-encoding,encryption,crypto-key,ttl,encryption-key,content-type,authorization', 'access-control-allow-methods': 'POST', 'access-control-allow-origin': '*', 'access-control-expose-headers': 'location,www-authenticate', 'content-type': 'application/json', date: 'Sat, 24 Jul 2021 14:55:33 GMT', server: 'nginx', 'strict-transport-security': 'max-age=31536000;includeSubDomains', 'content-length': '213', connection: 'Close' }, body: '{"code": 401, "errno": 109, "error": "Unauthorized", "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes", "message": "Request did not validate missing authorization header: Key mismatch"}',

The important part is this:

body: '{"code": 401, "errno": 109, "error": "Unauthorized", "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes", "message": "Request did not validate missing authorization header: Key mismatch"}',

When I send notification to a Chrome Client, I get the following error:

WebPushError: Received unexpected response code at IncomingMessage.<anonymous> (/home/sahilnare78/apps/Hola_Peeps_New_Design/node_modules/web-push/src/web-push-lib.js:347:20) at IncomingMessage.emit (events.js:326:22) at IncomingMessage.EventEmitter.emit (domain.js:483:12) at endReadableNT (_stream_readable.js:1241:12) at processTicksAndRejections (internal/process/task_queues.js:84:21) { statusCode: 403, headers: { 'content-type': 'text/plain; charset=utf-8', 'x-content-type-options': 'nosniff', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '0', date: 'Sat, 24 Jul 2021 14:55:32 GMT', 'content-length': '194', 'alt-svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"', connection: 'close' }, body: 'the key in the authorization header does not correspond to the sender ID used to subscribe this user. Please ensure you are using the correct sender ID and server Key from the Firebase console.\n',

Expected

When I tested my code on my local machine, it was working properly. But it doesn't work on my remote server.

Features Used

  • [ ] VAPID Support
  • [ ] Sending Notifications

Example / Reproduce Case

Here's the code that I used:

serviceworker.js:

self.addEventListener('push', function(event) { const payload = event.data ? event.data.json() : 'no payload'; event.waitUntil( self.registration.showNotification(payload.title, { body: payload.body, icon: payload.icon }) ) });

server.js:

webPush.sendNotification({ endpoint: subscription.endpoint, keys: { auth: subscription.auth, p256dh: subscription.p256dh }, expirationTime: 12*60*60 }, payload, options) .then(function() { res.json({registered: true}); }).catch((err) => console.error(err));

index.html (client side script):

navigator.serviceWorker.ready .then(function(registration) { return registration.pushManager.getSubscription() .then(async function(subscription) { if (subscription) { return subscription; } const response = await fetch('/api/notification/vapidPublicKey'); const vapidPublicKey = await response.text(); const convertedVapidKey = urlBase64ToUint8Array(vapidPublicKey); return registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: convertedVapidKey }); }); }).then(function(subscription) { fetch('/api/notification/register', { method: 'post', headers: { 'Content-type': 'application/json' }, body: JSON.stringify({ subscription: subscription }), }); });

sahilnare avatar Jul 24 '21 15:07 sahilnare