Registering service worker behind authentication fails on ESM modules

Viewed 116

I have developed a javascript application with a custom service worker and facing a problem fetching the service worker file behind authentication.

My application is deployed behind a cookie based authentication (after login, the user has a cookie which is checked by every request). This is fine for for fetching all resources, except the service-worker file, for which the browser doesn't send any cookies. Note: This only happens if the service worker is loaded with {type: "module"}, and works fine with {type: "clasic"}.

Here is miminal example reproducing my issue:

backend: 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')
})

frontend: index.html

<body>
    <h1>Test</h1>
    
    // Doesn't work with the auth
    <script type="module">
        const registration = await navigator.serviceWorker.register('test.js', {type: "module"})
        console.log(registration)
    </script>
    // Works with the auth
    <script src="test2.js"></script>
    // Works with the auth
    <script type="module">
        const registration = await navigator.serviceWorker.register('test.js', {type: "clasic"})
        console.log(registration)
    </script>
</body>

When the request is made, the browser doesn't attach any cookie information:

chrome devtool image.

Why doesn't the browser treat the service-worker module request as everything else? Why is there a difference between the two types?

0 Answers
Related