使用 header 重定向

Redirection with a header

我用的是node js,express js。我想确保如果 app.get 没有令牌参数,则上传一个 html 文件,其中包含将传递令牌的 js。如果令牌已通过,则显示另一个 html 文件。

但我不知道如何通过使用令牌 header 的传输从客户端进行重定向

服务器:

app.get("/admin-cp/:page", function (req, res) {
    const idToken = req.headers.authorization;
    if (!idToken)
    {

        return res.sendFile(path.join(initial_path, "admin-cp/loader.html"));
        //return res.status(401).send("Unauthorized")
    } 

    const sessionCookie = req.cookies.session || "";
    
    admin
        .auth()
        .verifySessionCookie(sessionCookie, true  )
        .then((userData) => {
            console.log("Logged in:", userData.email)
            console.log('Авторизован. Доступ в админ панель открыт')


            admin
            .auth()
            .verifyIdToken(idToken)
            .then((claims) => 
            {  
                if (claims.admin === true) 
                {    
                    console.log('Зашёл с правами администратора', req.params.page);
                    if (req.params.page === 'analytics')
                    {
                        console.log("Open analytics");
                        res.sendFile(path.join(initial_path, "admin-cp/main-admin_cp.html"));
                        //res.render(path.join(initial_path, "admin-cp/main-admin_cp.html"));
                        //res.redirect('/admin-cp/home');
                    }
                } 
                else if (claims.admin === false)
                {
                    console.log('Зашёл без прав администратора');
                    //res.sendFile(path.join(initial_path, "admin-cp/global_not_permission.html"));
                    res.redirect('/');
                }
            });
            
            
        })
        .catch((error) => {
            console.log('Не авторизован. Ошибка', error, ' отсутвует userData')
            res.redirect("/login");
        });

});

我试着用“fetch”来做:

const res = await fetch('/admin-cp/analytics',  { headers: { authorization: idToken },  redirect: 'follow' })
  .then(res => {
    console.log(res);
    if (res.redirected) {
        document.location = res.url;
    }
  })

但是所有的操作res.sendFile都没有更新

帮助提供任何建议。请

事情的来龙去脉是这样的。

  1. 您向 URL
  2. 提出 fetch 请求,包括 authorization header
  3. 服务器以重定向响应
  4. 浏览器遵循重定向并向新的 URL 发出 fetch 请求(我不知道它是否再次包含 authorization header)
  5. 服务器响应您通常忽略的内容
  6. 您阅读了 fetch 被重定向到
  7. 的 URL
  8. 您将 URL 分配给 document.location 导致浏览器向 URL 发出 new GET 请求(绝对 没有 authorization header).
  9. 服务器端代码发送res.sendFile(path.join(initial_path, "admin-cp/loader.html"))因为没有authorizationheader.

您无法让浏览器导航并包含 authorization header。

如果您想在导航时进行身份验证:请改用 cookie。