Как проверить пароль с помощью express-validator npm

Я пишу REST API, используя node, express web module. Для проверки я использую экспресс-валидатор npm. Я хочу применить некоторые правила проверки в поле пароля.

Как я могу достичь этого с помощью express-validator?

какие правила проверки я хочу применить для пароля как:

  1. минута 8 char длиной.
  2. по крайней мере один верхний регистр.
  3. по крайней мере, один нижний регистр.
  4. по крайней мере один специальный характер.

Я читал в этой ссылке, что существует функция регулярное выражение() . Я попробовал, но ничего не вышло.

мой подход:

req.check("password", "Password should be combination of one uppercase , one lower case, one special char, one digit and min 8 , max 20 char long").regex("/^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/", "i");

enter image description here

на экспресс-js они перечислили все методы, но не нашли метод / трюк, которые решают мою проблему.

5 ответов


ссылка, на которую вы ссылаетесь, почти 3 года. С тех пор API validator изменен.

чтобы проверить регулярное выражение, используйте .matches():

req.check("password", "...").matches(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/, "i");

может опоздать на часть

https://github.com/mlabieniec/complexity

У этого есть хорошее решение для создания RegEx


Я считаю, что принятый ответ является устаревшим. и и экспресс-валидатор не лучшие способы проверки паролей в 2017 году, так как неясность регулярных выражений делает приложение недостижимым и подверженным ошибкам.

пароль-оценщику позволяет легко определять правила паролей и поддерживать их. Вот пример:

var passwordValidator = require('password-validator');

var schema = new passwordValidator();

schema
  .is().min(8)
  .is().max(100)
  .has().uppercase()
  .has().lowercase();

console.log(schema.validate('notvalid'); // => false

PS: Я автор пароль-оценщику.


выбранный ответ неполон, так как отсутствует проверка специальных символов. Правильный ответ должен быть:

req.checkBody("password", "Password must include one lowercase character, one uppercase character, a number, and a special character.").matches(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/, "i");

единственная реальная разница в том, что я добавил (?=.*[^a-zA-Z0-9]) выражение, которое гарантирует, что пользователь использует символ, который не является числом или буквой.


Если вы используете массив для проверки и поэтому объект req недоступен, вы также можете сделать следующее:

body('field_name').matches(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/, "i").withMessage('Password should be combination of one uppercase , one lower case, one special char, one digit and min 8 , max 20 char long'),