我在尝试使用我的应用中的自定义标头发送axios请求时遇到了一些问题,因此我可以使用它们在我的服务器上进行身份验证。
我有一个使用firebase身份验证和节点/快速后端服务器的本机应用程序。
当用户登录时,我会抓住他们的火力基地并存储它。
每当我向服务器发出axios请求时,我都会将该idtoken作为标题发送。
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);
在服务器代码中,将有一个快速中间件,用于检查请求头中发送的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
和Error: Can't set headers after they are sent
这是失败的具体请求:
async getUser(req, res, next) {
const firebaseUID = req.params.firebaseUID;
try {
const user = await User.findOne({ firebaseUID });
res.send(user);
} catch (e) {
next(e);
}
},
这里发生了什么,我该如何解决?谢谢!