使用 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都没有更新
帮助提供任何建议。请
事情的来龙去脉是这样的。
- 您向 URL
提出 fetch
请求,包括 authorization
header
- 服务器以重定向响应
- 浏览器遵循重定向并向新的 URL 发出
fetch
请求(我不知道它是否再次包含 authorization
header)
- 服务器响应您通常忽略的内容
- 您阅读了
fetch
被重定向到 的 URL
- 您将 URL 分配给
document.location
导致浏览器向 URL 发出 new GET
请求(绝对 没有 authorization
header).
- 服务器端代码发送
res.sendFile(path.join(initial_path, "admin-cp/loader.html"))
因为没有authorization
header.
您无法让浏览器导航并包含 authorization
header。
如果您想在导航时进行身份验证:请改用 cookie。
我用的是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都没有更新
帮助提供任何建议。请
事情的来龙去脉是这样的。
- 您向 URL 提出
- 服务器以重定向响应
- 浏览器遵循重定向并向新的 URL 发出
fetch
请求(我不知道它是否再次包含authorization
header) - 服务器响应您通常忽略的内容
- 您阅读了
fetch
被重定向到 的 URL
- 您将 URL 分配给
document.location
导致浏览器向 URL 发出 newGET
请求(绝对 没有authorization
header). - 服务器端代码发送
res.sendFile(path.join(initial_path, "admin-cp/loader.html"))
因为没有authorization
header.
fetch
请求,包括 authorization
header
您无法让浏览器导航并包含 authorization
header。
如果您想在导航时进行身份验证:请改用 cookie。