3

我试图断言 2 个密码匹配:

app.post('/users/signup', [
    check('email', 'email is not valid')
      .isEmail()
      .trim(),
    check('password')
      .isLength({ min: 4 })
      .withMessage('password must be at least 4 characters')
      .equals('passwordConfirmation'),
  ], (req, res) => {
    ...

我正在使用equals,但它正在检查是否password实际上等于字符串'passwordConfirmation'而不是值req.body.passwordConfirmation

4

1 回答 1

2

你不能以你想要的方式使用它。

我猜,在您的表单或请求正文中,您有两个字段:

  • password
  • confirmPassword

您可以通过以下方式访问:

  • req.body.password
  • req.body.confirmPassword

如果这是正确的,那么您将无法使用checkAPI 验证两者是否相等,因为您当时无权访问该req对象。

您可以做的是编写一个包装中间件check

const check = require('express-validator/check')

exports.verifyPasswordsMatch = (req, res, next) => {
    const {confirmPassword} = req.body

    return check('password')
      .isLength({ min: 4 })
      .withMessage('password must be at least 4 characters')
      .equals(confirmPassword)
}

然后像这样使用包装器:

app.post('/users/signup', [
    check('email', 'email is not valid')
      .isEmail()
      .trim(),
    verifyPasswordsMatch,
  ], (req, res) => {
    ...

以上未经测试,但希望显示您需要做的事情。

于 2018-05-29T21:24:35.743 回答