Middleware para la visibilidad de una contraseña (Nodo JS)

0

Pregunta

Dado el siguiente router-escenario:

router.get('/A', [returns password])
router.get('/B', [returns no password])

¿Qué debe hacer un correcto middleware aspecto que devuelve la contraseña dependiendo de la ruta?

Mi intento se parece a esto:

function passwordCheck(req, res, next) {
  let user= req.body_id
  User.findOne({_id: id}).select('+password').exec(function(err, result) {
    if (err) {
      console.log("error: " + err)
    } else {

      console.log("okay.");
      res.send(result)
    }
  })
}
express javascript mongoose router
2021-11-22 11:51:13
1

Mejor respuesta

0

Usted puede crear algo similar a la del middleware de la fábrica:

const checkPassword = (returnPassword = false) => {
    return (req, res, next) => {
        User.findOne({_id: req.body_id })
        .select('+password')
        .exec((err, result) => {
            if (err) {
                console.error(err);
                return res.status(500).send() // End of request on error?
            } else {
                const password = result['password'] // get your password this way or somehow else
                if (returnPassword) {
                    // Store password in request if returnPassword=true 
                    res.locals.userPassword = password;
                } 
                next();
            }
        })
    }
}

Uso:

router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)

El acceso en las rutas:

router.get('/', (req, res) => {
  console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});

También echa un vistazo a Expresar docs: Escrito de middleware para su uso en Expresar apps para entender lo que es next y cómo funciona (me di cuenta de que no lo uso en su intento).
También supongo que usted tiene pocos errores ortográficos:

  • select('+password') - ¿está usted seguro de que más es necesario?
  • findOne({_id: id}) - debe ser findOne({_id: user})? O por qué te define user de otra manera?

P. S. ... y nunca te olvides de controlar los errores :)

2021-11-22 14:23:19

Debo agregar, que debemos tratar de guardar nuestras variables en algo como res.locals en lugar de directamente a req. Este hábito puede reemplazar variables importantes en el req objeto.
Someone Special

@SomeoneSpecial de acuerdo, gracias por la sugerencia! He actualizado mi código
Xeelley

Estoy casi allí: if(!req.body.userID && !req.body.userName && !req.body.password) { let so userService.getUsers(function(error, users) { for(let i = 0; i < users.length; i++){ console.log(users[i].noPassword) so=users[i].noPassword() console.log(so) /* res.write(so) */ res.write(toString(so)) } res.end() }) } Yo iterar a través de la mangosta objetos y borrar en cada uno la contraseña. PERO cómo hago para poner estos nuevos objetos de colección ?
pawl123

@pawl123 por favor. no use los comentarios para grandes fragmentos de código (por motivos de legibilidad), mejor actualización de su respuesta.
Xeelley

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................