Así que tengo una aplicación Laravel que utiliza un trabajador de servicio para el almacenamiento en caché y las notificaciones push web. Estoy tratando de pasar una acción a las notificaciones push web para que cuando aparezca en el dispositivo de los usuarios, les brinde 2 opciones: Aceptar o Rechazar. Al hacer clic en cualquiera de estas opciones, se activará una solicitud POST a mi aplicación Laravel para actualizar el estado de los usuarios. Aquí está mi archivo service-worker.js:
self.addEventListener('notificationclick', function(event) { console.log('[Service Worker] Notification click Received.'); var notification = event.notification; var action = event.action; notification.close(); switch (action) { case 'close': console.log('[Service Worker] close Action Clicked'); break; case 'view': console.log('[Service Worker] view Action Clicked') event.waitUntil(clients.openWindow(notification.data.url)); break; case 'accept-player': console.log('[Service Worker] accept-player Action Clicked') fetch(notification.data.url, { method: 'POST', headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content }, body: { accepted:1 }, }).catch(error => { console.error(error) }); break; case 'reject-player': console.log('[Service Worker] reject-player Action Clicked') fetch(notification.data.url, { method: 'POST', headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content }, body: { accepted:0 }, }).catch(error => { console.error(error) }); break; } }); Dentro de mi interruptor, me refiero específicamente a los casos de accept-player y reject-player para la búsqueda.
Por lo general, obtengo el token CSRF de mi HTML HEAD, pero en este caso, el document no existe, por lo que no puede obtenerlo. Me sale el siguiente error en la consola:
sw.js:86 Uncaught ReferenceError: document is not defined¿Cómo puedo obtener el token CSRF en mi service-worker.js para poder realizar una solicitud POST?
Leí un poco y no estoy seguro de si debería deshabilitar la verificación CSRF para esta ruta en particular.
Esperando que alguien pueda ayudar con esto.
Esto está resultando bastante difícil y decidí cambiar mi enfoque. Aunque es útil deshabilitar la verificación CSRF en esta ruta en particular, mi ruta requiere autenticación y el trabajador del servicio no tiene configuración de autenticación para manejar la solicitud.
En lugar de hacer una solicitud POST de mi trabajador de servicio a mi aplicación, estoy haciendo una redirección a otra ruta GET con algunos parámetros adicionales, por ejemplo, "showPlayersPending=1". Luego, en mi opinión, simplemente estoy ajustando un si alrededor de la solicitud si tiene "showPlayersPending" y luego mostrar el modal en carga para que el usuario autenticado pueda realizar la solicitud POST.