Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
4 tasks
sahilnare opened this issue Jul 24, 2021 · 0 comments

Comments

@sahilnare
Copy link

sahilnare commented Jul 24, 2021

Setup

Operating System:
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
}),
});
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant