Начиная использовать JWT в node.js - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь работать с JWT в приложении node.js. Я следовал этому руководству .

Но я сталкиваюсь с проблемами на уровне промежуточного программного обеспечения:

function authenticateToken(req, res, next)

, что в момент времени 10:30 в видео.

Когда я запускаю код, у меня всегда есть:

authHeader == null

Я пробовал разные вещи, чтобы найти другие возможные формы для req.headers ['authorization'] like req.headers.authorization но безрезультатно.

Я должен сказать, что у меня есть маршрут в моем приложении, который позволяет мне войти в систему, и что я использую его прямо перед тем, как маршрут достигнет промежуточное программное обеспечение. Но в любом случае authHeader продолжает оставаться null .

Что я должен сделать, чтобы убедиться, что я получаю действительный authHeader, как ожидается, чтобы приложение работало так же, как в учебное пособие и движение вперед?

В случае, если это может быть полезно, вот полный код функции промежуточного программного обеспечения:

function authenticateToken(req, res, next) {
  // Get the jwt access token from the request header.
  const authHeader = req.headers['authorization']
  const token = authHeader && authHeader.split(' ')[1]

  if (token == null) {
    console.log('authenticateToken-401')
    return res.sendStatus(401)
  }

  jwt.verify(token, 'myBigSecret', (err, user) => {
    console.log(err)
    if (err) {
      console.log('authenticateToken-403')
      return res.sendStatus(403)
    }

    req.user = user
    next()
  })
}

А также код, который запускается при входе пользователя в систему:

app.post('/login', async function(req, res) {
  Parse.initialize(process.env.APP_ID);
  Parse.serverURL = process.env.SERVER_URL;
  Parse.User.logIn(req.body.usrname, req.body.password, {
    success: user => {
      // Let us handle this using JWT.
      const jwtUser = {name: req.body.usrname}
      const accessToken = jwt.sign(jwtUser, 'myBigSecret')
      res.setHeader("Authorization", 'Bearer '+accessToken);

      res.json({accessToken: accessToken})
    },
    error: (user, error) => {
      console.log('Error: '+error);
      res.render('pages/login.ejs', {});
    },
  });
});

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

В приведенном выше коде входа вы подписали, используя jwt, чтобы его можно было использовать, когда клиентское приложение хочет получить доступ к некоторым ограниченным маршрутам на вашем бэкенде. Теперь, когда клиенты хотят получить доступ к маршруту из внешнего интерфейса, вам нужно установить токен авторизации в ajax as header Примерно так:

$.ajax({
  url: "/apiyouwanttoaccess",
  method: "GET",
  headers: { Authorization: "Bearer " + Cookies.get("token") }
})

Приведенный выше код ajax должен находиться где-то рядом с кодом js, где вы хотите получить доступ к безопасным маршрутам. Вы уже подписали токен на своем логине (2-й фрагмент кода), чтобы его можно было использовать для конкретного пользователя c, установив файлы cookie

0 голосов
/ 11 апреля 2020

Вам нужно установить заголовки в вашем запросе, похоже, вы не установили заголовки в своем запросе

...