Ошибка отправки запроса при добавлении промежуточного ПО авторизации с Javascript, express - PullRequest
0 голосов
/ 29 февраля 2020

Я учусь создавать базу данных и конечную точку с javascript и express на базе Firebase. И все работает нормально, пока я не попытаюсь добавить Middleware. Вот так без промежуточного ПО мой код выглядит так:

https://blahblah/api/newpost

Вот так выглядит запрос:

    app.post('/newpost', (req, res) => {
    const newPost = {
      userHandle: req.body.handle,
      field: req.body.field,
      text: req.body.text,
      createdAt: new Date().toISOString()
    };

    db
     .collection('posts')
     .add(newPost)
     .then(doc => {
       res.json({ message: `Document with ID: ${doc.id} has been created` });
     })
     .catch(err => {
       res.status(500).json({ error: 'Something went wrong' });
       console.error(err);
     })
  })

Все отлично работает там. Но затем я пытаюсь добавить это промежуточное программное обеспечение:

const FBAuth = (req, res, next) => {
  let idToken;
  if(req.headers.authorization && res.headers.authorization.startsWith('Bearer ')){
    idToken = req.header.authorization.split('Bearer ')[1];
  } else {
    console.error('No token found');
    return res.status(403).json({error: 'Unauthorized'});
  }

  admin.auth().verifyIdToken(idToken)
    .then(decodedToken => {
      req.user = decodedToken;
      console.log(decodedToken);
      return db.collection('users')
        .where('userId', '==', req.user.uid)
        .limit(1)
        .get()
    })
    .then(data => {
      req.user.handle = data.docs[0].data().handle;
      return next();
    })
    .catch(err => {
      console.error('Error while verifying token', err);
      return res.status(403).json(err);
    })
}

И теперь код запроса на публикацию выглядит следующим образом:

app.post('/newpost', FBAuth, (req, res) => {
  const newPost = {
    userHandle: req.user.handle,
    field: req.body.field,
    text: req.body.text,
    createdAt: new Date().toISOString()
  };

  db
    .collection('posts')
    .add(newPost)
    .then(doc => {
      res.json({ message: `Document with ID: ${doc.id} has been created` });
    })
    .catch(err => {
      res.status(500).json({ error: 'Something went wrong' });
      console.error(err);
    })
})

Поэтому в основном я добавляю промежуточное программное обеспечение и вместо получения userHandle из тела запроса Я получаю его от пользователя, предоставленного промежуточным программным обеспечением, так же, как парень из учебного пособия, но, возможно, этот способ устарел? Как я получаю сообщение об ошибке, когда парень из учебника не ...

Это ошибка:

<code><!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>Error</title>
</head>

<body>
    <pre>Internal Server Error

I добавьте носитель авторизации к заголовкам. Что может быть не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...