Как проверить пароль с помощью express-validator npm
Я пишу REST API, используя node, express web module. Для проверки я использую экспресс-валидатор npm. Я хочу применить некоторые правила проверки в поле пароля.
Как я могу достичь этого с помощью express-validator?
какие правила проверки я хочу применить для пароля как:
- минута 8 char длиной.
- по крайней мере один верхний регистр.
- по крайней мере, один нижний регистр.
- по крайней мере один специальный характер.
Я читал в этой ссылке, что существует функция регулярное выражение() . Я попробовал, но ничего не вышло.
мой подход:
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");
на экспресс-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'),