Pertanyaan Tidak dapat mengatur tajuk setelah dikirim ... tidak ada masalah sampai saya menambahkan dalam autentikasi?


Saya mengalami beberapa masalah saat mencoba mengirim permintaan aksioma dengan header khusus dari aplikasi saya sehingga saya dapat menggunakannya untuk otentikasi di server saya.

Saya memiliki aplikasi asli yang bereaksi yang menggunakan otentikasi firebase dan server backend node / express.

Ketika seorang pengguna masuk, saya akan mengambil firebase idtoken dan menyimpannya.

Saya kemudian akan mengirim idtoken itu sebagai tajuk setiap kali saya membuat permintaan aksioma ke server.

 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);

Dalam kode server, akan ada middleware ekspres yang memeriksa apakah idtoken yang dikirim dalam header permintaan valid atau tidak. Jika ya, ia akan memanggil next () dan melanjutkan untuk mengeksekusi logika. Jika tidak, maka itu akan gagal dan mengirim status 401.

Ini ada di saya app.js:

const app = express();


  app.use(bodyParser.json());

  app.use(firebaseAuthentication);
  router(app);

Ini adalah firebaseAuthentication middleware:

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' });
  }
};

Ini routernya:

module.exports = app => {

    app.get('/api/users/:firebaseUID', UserController.getUser);
}

Masalahnya adalah bahwa segala sesuatu tampaknya berjalan sampai mencoba mengirim data yang baik kembali ke pengguna ... tetapi saya mendapatkan 404 dan a Error: Can't set headers after they are sent

Ini adalah permintaan khusus yang gagal:

  async getUser(req, res, next) {
    const firebaseUID = req.params.firebaseUID;
    try {
      const user = await User.findOne({ firebaseUID });

      res.send(user);
    } catch (e) {
      next(e);
    }
  },

Apa yang terjadi di sini dan bagaimana cara memperbaikinya? Terima kasih!


4
2017-09-10 19:47


asal


Jawaban: