Middleware pour la visibilité d'un mot de passe (Node JS)

0

La question

Le suivant routeur-scénario:

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

Que doit corriger middleware ressembler à qui renvoie le mot de passe en fonction de l'itinéraire?

Ma tentative ressemble à ceci:

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

La meilleure réponse

0

Vous pouvez créer quelque chose de similaire à middleware factory:

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();
            }
        })
    }
}

Utilisation:

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

L'accès au parcours:

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

Consultez également Exprimer docs: Écrit, de middleware pour une utilisation dans l'Express apps pour comprendre ce qu'est next et comment il fonctionne (j'ai remarqué que vous n'avez pas l'utiliser dans votre tentative).
Aussi, je suppose que vous avez quelques fautes de frappe:

  • select('+password') - êtes-vous sûr de plus est-il nécessaire?
  • findOne({_id: id}) - doit être findOne({_id: user})? Ou pourquoi vous avez défini user sinon?

P. S. ... et n'oubliez pas de gérer les erreurs :)

2021-11-22 14:23:19

Peut-je ajouter, que nous devrions essayer de stocker nos variables dans quelque chose comme res.locals au lieu de directement de req. Cette habitude peut remplacer les variables importantes dans le req objet.
Someone Special

@SomeoneSpecial d'accord, merci pour l'astuce! J'ai mis à jour mon code
Xeelley

J'y suis presque: 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() }) } Je itérer la mangouste des objets et de les effacer, à chacun le mot de passe. MAIS comment puis-je mettre ces nouveaux objets de retour d'une collection ?
pawl123

@pawl123 s'il vous plaît. ne pas utiliser les commentaires pour les grands fragments de code (pour des raisons de lisibilité), une meilleure mise à jour de votre réponse.
Xeelley

Dans d'autres langues

Cette page est dans d'autres langues

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