Desarrollé una aplicación javascript con un trabajador de servicio personalizado y me enfrenté a un problema al obtener el archivo del trabajador de servicio detrás de la autenticación.
Mi aplicación se implementa detrás de una autenticación basada en cookies (después de iniciar sesión, el usuario tiene una cookie que se verifica con cada solicitud). Esto está bien para obtener todos los recursos, excepto el archivo del trabajador del servicio, que el navegador no envía ninguna cookie .
Aquí hay un ejemplo miminal que reproduce mi problema:
servidor: index.js
// Service worker file app.get('/test.js', (req,res) => { if(req.cookies.token != null) { res.sendFile('./public/test.js') } else { res.sendStatus(401) } }) // Index page app.get('/', (req, res) => { // initial login check goes here res.cookie('token',"<user token>").sendFile('./public/index.html') })interfaz: index.html
<body> <h1>Test</h1> // Doesn't work with the auth <script> const registration = await navigator.serviceWorker.register('test.js') console.log(registration) </script> // Works with the auth <script src="test2.js"></script> </body>Cuando se realiza la solicitud, el navegador no adjunta ninguna información de cookies:
.
¿Por qué el navegador no trata la solicitud del trabajador del servicio como todo lo demás? ¿Me falta una bandera similar para obtener la opción de credentials ?