发送后不能设置标头...在我添加身份验证之前没问题?

时间:2017-09-10 19:47:49

标签: javascript node.js http express axios

我在尝试使用我的应用中的自定义标头发送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);
}

问题是,在尝试将好数据发送给用户之前,所有内容似乎都会通过......但我得到404Error: 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);
    }
  },

这里发生了什么,我该如何解决?谢谢!

0 个答案:

没有答案