【发布时间】:2019-11-11 19:11:31
【问题描述】:
我正在从客户端向我的 node/express 应用程序中的路由发出 GET 请求,也许我遗漏了一些非常明显的东西,但我的应用程序停留在路径 localhost:5000 上并且没有转到 localhost:5000/adminPortal 和根据 /adminPortal GET 路由中的 express res.render() 渲染视图。 我已经坚持了 3 天了,我确信这很明显......也许 XML http 请求不是正确的方法?我需要使用什么来将标头(授权)传递给快速路由以使其链接并呈现视图? 这是客户端代码:
firebase.auth().onAuthStateChanged(function(user) {
console.log("Auth state changed");
//console.log("verified: " + user.emailVerified);
if(user){
firebase.auth().currentUser.getIdToken().then(function(token){
console.log('Sending request to with ID token in Authorization header.');
var req = new XMLHttpRequest();
req.open('GET', '/adminPortal', true);
req.setRequestHeader('Authorization', 'Bearer ' + token);
req.responseType = "document";
req.send();
}).catch(function(error){
console.log("error:" + error);
});
}
在我的服务器端进入这条路线(通过中间件后):
router.get('/',isLoggedInAsUser, (req, res) => {
let usersRef = db.collection('Users');
var ownPolls = [];
var allUsers = [];
let firebaseUsers = usersRef.get()
.then(snapshot => {
snapshot.forEach(user => {
console.log(user.id, '=>', user.data());
allUsers.push(user.data());
});
console.log("test");
res.render('adminPortal/index', {allUsers: allUsers});
return null;
})
.catch(err => {
console.log('Error getting documents', err);
});
});
这是检查我在 XMLHTTPrequest() 中传递的标头中的令牌的中间件:
//Check if request is from User account
isLoggedInAsUser: async function(req, res, next){
if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) {
console.log('Found "Authorization" header');
// Read the ID Token from the Authorization header.
idToken = req.headers.authorization.split('Bearer ')[1];
try {
const decodedToken = await admin.auth().verifyIdToken(idToken);
if(decodedToken){
req.body.uid = decodedToken.uid;
console.log("The decoded token: "+ decodedToken.uid);
next();
} else{
return res.status(401).send("You are not autheeeroized");
}
} catch (e){
return res.status(401).send("You are not authroized" + e);
}
}
【问题讨论】:
-
您在哪里处理来自 XHR 请求的响应?
-
我没有意识到我必须这样做?我以为页面会使用 res.render() 自动重定向?我的 XHR 请求怎么可能做到这一点?谢谢!
-
好吧 ... am XHR 的结果永远不会影响当前位置 - 为什么会这样?
-
我认为对我的 node/express 服务器的 XHR 请求会以某种方式“调用”res.render 以自动调用。有没有办法可以将标头传递给来自我的节点/快递的普通页面链接 GET 请求?
标签: javascript node.js firebase express xmlhttprequest