Вставка токена сброса пароля в незащищенный маршрут NodeJS - PullRequest
0 голосов
/ 11 апреля 2019

В настоящее время я пытаюсь передать сгенерированный токен для сброса пароля внутри моего незащищенного маршрута, но всякий раз, когда я выполняю свой запрос GET , я получаю 401 Unauthorized request.

Я пытался включить пакет Path-to-RegExp и создать отдельный маршрут массива, но он не работал:

let tokens = [];
const unprotected = [
  pathToRegexp('/user/reset/:token', tokens),
];

My сброс пароля токен создается в отдельной службе и вызывается в контроллере:

 const token = crypto.randomBytes(20).toString('hex');
          user.update({
            resetPasswordToken: token,
            resetPasswordExpires: Date.now() + 360000,
          });

Вот как я структурировал свой expressJwt с помощью unless:

app.use(expressJwt({
  secret: process.env.SECRET_BEARER,
  getToken: req => {

     MY TOKEN AUTHORISATION CODE IS PLACED HERE.
 }

}).unless({ path: ['/images/', '/user/password-reset', unprotected ]}));

Моя проблема в том, что всякий раз, когда я пытаюсь создать маршрут без аутентификации, такой как .unless({path: ['/images/', '/user/password-reset', '/user/reset/:token' ]}));, маршрут /user/reset/:token анализируется только как строка, а значение :token фактически не передается.

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

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Вы можете передать регулярное выражение, если вы, что вы, возможно, уже поняли, так как вы пытались использовать Path-to-RegExp.Вы также можете просто попытаться написать регулярное выражение самостоятельно и передать его непосредственно.В вашем случае, если ваш запрос будет выглядеть следующим образом:

.unless({ path: [/\/images\//, /\/user\/password-reset\//, /^\/user\/reset\/[a-z0-9_-]*/]}));

РЕДАКТИРОВАТЬ: этот SO ответ предполагает, что вы не можете объединить регулярное выражение и строки в одном массиве, поэтомуЯ преобразовал все пути в выражения регулярных выражений.

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

У вас есть массив внутри массива для значения path, переданного в unless.

Изменение:

}).unless({ path: ['/images/', '/user/password-reset', unprotected ]}));

Кому:

}).unless({ path: unprotected }));

И изменить unprotected, чтобы включить другие пути:

const unprotected = [
  '/images/',
  '/user/password-reset',
  pathToRegexp('/user/reset/:token', tokens),
];

Убедитесь, что вы тестируете путь, который включает токен, например: /user/reset/123-some-real-looking-value

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