发送后无法设置标题…没有问题,直到我join了身份validation?
我遇到了一些问题,试图从我的应用程序发送自定义标头的axios请求,所以我可以使用它们在我的服务器上进行身份validation。
我有一个使用Firebase身份validation和节点/快递后端服务器的原生应用程序。
当用户login时,我会抓住他们的firebase idtoken并存储它。
然后,只要我向服务器发出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); } },
这里发生了什么,我该如何解决? 谢谢!