Передайте тело ответа следующим - PullRequest
0 голосов
/ 07 февраля 2020

Я довольно новичок в JavaScript, поэтому я все еще пытаюсь разобраться. В приложении мы используем jwt, чтобы проверить, действителен ли токен. Для этого следующая функция создается с использованием учебного пособия и моих собственных экспериментов:

function isAuthorized(req, res, next) {
    const bearerHeader = req.headers['authorization']

    if (typeof bearerHeader !== 'undefined') {
        let token = bearerHeader.split(' ')[1]
        let privateKey = 'secretkey'

        jwt.verify(token, privateKey, { algorithm: "HS256" }, (err) => {
            if (err) {
                res.sendStatus(403)
            }
            else {
                next()
            }
        })
    }
    else {
        res.sendStatus(403)
    }
}

Когда я затем выполняю вызов post с некоторой полезной нагрузкой json, она будет правильно проходить в следующая функция:

app.post('/api/posts', isAuthorized, (req, res) => {
    res.json({
        message: 'Post created',
        request: req.body.username
    })
})

Единственное, что, похоже, не работает, это как проверить полезную нагрузку json в body, которая была отправлена ​​с вызовом post. Конечно, должна быть возможность иметь функцию промежуточного программного обеспечения isAuthorized для передачи этих данных.

1 Ответ

1 голос
/ 07 февраля 2020

Вы можете опробовать несколько вариантов для достижения этого

Подход 1:

Используя res.locals , гарантированно сохраняется состояние в течение срока действия запроса .

Объект, который содержит локальные переменные ответа, ограниченные областью запроса, и, следовательно, доступные только для представлений, представленных во время этого цикла запрос / ответ (если есть). В противном случае это свойство идентично app.locals.

Это свойство полезно для предоставления информации уровня запроса, такой как имя пути запроса, аутентифицированный пользователь, настройки пользователя и т. Д.


Сохранить

app.use(function(req, res, next) {
 res.locals.username = req.username;  
 res.locals.authenticated = true;
 next();
});

Чтобы извлечь переменную

app.use(function(req, res, next) {
 if (res.locals.authenticated) {
  console.log(res.locals.user.id);
 }
 next();
});

Подход 2:

Присоединить вашу переменную к объекту req.

req.username = username;

Подход 1 является наиболее рекомендуемым способом достижения того, что вы ищете.

Надеюсь, это поможет вам :)

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