Javascript Can';在发送后设置标题…在我添加身份验证之前没有问题?
我在尝试从我的应用程序发送带有自定义头的axios请求时遇到了一些问题,因此我可以在服务器上使用它们进行身份验证 我有一个使用firebase身份验证和node/express后端服务器的react本机应用程序 当用户登录时,我将获取他们的firebase idtoken并将其存储 然后,每当我向服务器发出axios请求时,我都会将该idtoken作为头发送Javascript Can';在发送后设置标题…在我添加身份验证之前没有问题?,javascript,node.js,http,express,axios,Javascript,Node.js,Http,Express,Axios,我在尝试从我的应用程序发送带有自定义头的axios请求时遇到了一些问题,因此我可以在服务器上使用它们进行身份验证 我有一个使用firebase身份验证和node/express后端服务器的react本机应用程序 当用户登录时,我将获取他们的firebase idtoken并将其存储 然后,每当我向服务器发出axios请求时,我都会将该idtoken作为头发送 const { currentUser } = firebase.auth(); const url = ${serverUrl}
const { currentUser } = firebase.auth();
const url = ${serverUrl}/api/users/${user.uid`;
const idtoken = await currentUser.getToken(true);
var config = {
headers: { idtoken },
};
const response = await axios(url, config);
在服务器代码中,将有一个express中间件来检查请求头中发送的idtoken是否有效。如果是,它将调用next()并继续执行逻辑。否则,它将失败并发送401状态
这在我的app.js
中:
const app = express();
app.use(bodyParser.json());
app.use(firebaseAuthentication);
router(app);
这是firebaseAuthentication
中间件:
const firebaseAuthentication = async (req, res, next) => {
console.log(req);
try {
const { idtoken } = req.headers;
await admin.auth().verifyIdToken(idtoken);
next();
} catch (e) {
res.status(401).send({ error: 'Unauthorized request. Must be signed in via firebase' });
}
};
这是路由器:
module.exports = app => {
app.get('/api/users/:firebaseUID', UserController.getUser);
}
问题是,在它尝试将好的数据发送回用户之前,一切似乎都进行了……但我得到了一个404
和一个错误:发送后无法设置标题
这是失败的特定请求:
async getUser(req, res, next) {
const firebaseUID = req.params.firebaseUID;
try {
const user = await User.findOne({ firebaseUID });
res.send(user);
} catch (e) {
next(e);
}
},
这里发生了什么事,我该如何解决?谢谢 当您记录
response
时,您是否返回了正确的数据?您是否确定它已通过身份验证,因为它似乎首先发送401
基本上,当您过早地返回响应时,会出现此错误。也就是说,标头已经从节点发送回客户端。@82t如果您有一个观点,这里可能是异步问题,函数可能会在等待authif Iconsole.log(user)
时抛出,然后它会准确地发回它应该做的事情。请确保在app.get路由之前有app.use