Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème authentification projet 6

Impossibilité de modifier ou supprimer les sauces

Sujet résolu
    12 octobre 2021 à 16:24:07

    Bonjour, j'ai un problème pour le projet 6 de la formation web développeur.

    Pour le projet ou l'on doit créer des routes dans le backend, je n'ai aucun bouton pour modifier ou supprimer les sauces qu'on créer.

    Ca doit venir de l'authentification, je peux me login mais je n'ai aucun accès aux sauces, comme si l'application me refusait tout les droits de modification/suppression. J'ai fait toutes les routes comme expliqué dans le cours, j'ai chercher ou pouvait être l'erreur mais en vain.

    J'espère que quelqu'un va pouvoir m'aider, merci d'avance !

    Voici mes controllers :

    const Sauce = require('../models/Sauce');
    const fs = require('fs');
    
    exports.getAllSauces = ((req, res, next) => {
      Sauce.find()
        .then(sauces => res.status(200).json(sauces))
        .catch(error => res.status(400).json({ error }));
    });
    
    exports.createSauce = (req, res, next) => {
      const sauceObject = JSON.parse(req.body.sauce);
      delete sauceObject._id;
      const sauce = new Sauce({
        ...sauceObject,
        imageUrl: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
      });
      sauce.save()
        .then(() => res.status(201).json({ message: 'Objet enregistré !'}))
        .catch(error => res.status(400).json({ error }));
    };
    
    exports.getOneSauce = ((req, res, next) => {
      Sauce.findOne({ _id: req.params.id })
        .then(sauce => res.status(200).json(sauce))
        .catch(error => res.status(404).json({ error }));
    });
    
    exports.modifySauce = ((req, res, next) => {
      const sauceObject = req.file ?
        {
          ...JSON.parse(req.body.sauce),
          imageUrl: `${req.protocol}://${req.get('host')}/images/${req.file.filename}`
        } : { ...req.body };
      Sauce.updateOne({ _id: req.params.id }, { ...sauceObject, _id: req.params.id })
        .then(() => res.status(200).json({ message: 'Objet modifié !'}))
        .catch(error => res.status(400).json({ error }));
    });
    
    exports.deleteSauce = ((req, res, next) => {
      Sauce.findOne({ _id: req.params.id })
        .then(sauce => {
          const filename = sauce.imageUrl.split('/images/')[1];
          fs.unlink(`images/${filename}`, () => {
            Sauce.deleteOne({ _id: req.params.id })
              .then(() => res.status(200).json({ message: 'Objet supprimé !'}))
              .catch(error => res.status(400).json({ error }));
          });
        })
        .catch(error => res.status(500).json({ error }));
    });



    Voici la page web sans possibilité de modification/suppression :

    -
    Edité par FlorentJouinot 14 octobre 2021 à 14:06:42

    • Partager sur Facebook
    • Partager sur Twitter
      13 octobre 2021 à 16:50:27

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: jscript;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        17 octobre 2021 à 17:20:16

        Bonjour,

        Maintenant que tu a créé ces routes côté backend, est-ce que tu les appelles à un moment ou un autre coté front end ? L'idée serait de rajouter un petit bouton modifier côté front, qui te permettrait d'accéder à un formulaire. Une fois le formulaire remplis, tu renvois les donné à ton back qui va gérer tout ça selon la route demandé + les infos transmises + vérifications des droits de ton user et qui te renverra une réponse de succès ou d'erreur selon les traitements demandé 

        • Partager sur Facebook
        • Partager sur Twitter
          18 octobre 2021 à 15:42:54

          Bonjour,

          Merci pour ta réponse, le problème c'est que pour avoir un bouton pour modifier ou supprimer un produit,  il faut que le serveur me reconnaisse en tant que "créateur" de ce produit. Et j'ai l'impression que ce n'est pas le cas. Et dans le projet, nous devons nous occuper uniquement du coté backend.

          Voici mes routes pour les fonctions login et register :

          const bcrypt = require('bcrypt');
          const jwt = require('jsonwebtoken');
          
          const User = require('../models/User');
          
          exports.signup = (req, res, next) => {
              bcrypt.hash(req.body.password, 10)
                .then(hash => {
                  const user = new User({
                    email: req.body.email,
                    password: hash
                  });
                  user.save()
                    .then(() => res.status(201).json({ message: 'Utilisateur créé !' }))
                    .catch(error => res.status(400).json({ error }));
                })
                .catch(error => res.status(500).json({ error }));
            };
          
          exports.login = (req, res, next) => {
            User.findOne({ email: req.body.email })
              .then(user => {
                if (!user) {
                  return res.status(401).json({ error: 'Utilisateur non trouvé !' });
                }
                bcrypt.compare(req.body.password, user.password)
                  .then(valid => {
                    if (!valid) {
                      return res.status(401).json({ error: 'Mot de passe incorrect !' });
                    }
                    res.status(200).json({
                      userId: user._id,
                      token: jwt.sign(
                        { userId: user._id },
                        'RANDOM_TOKEN_SECRET',
                        { expiresIn: '24h' }
                      )
                    });
                  })
                  .catch(error => res.status(500).json({ error }));
              })
              .catch(error => res.status(500).json({ error }));
          };

          Après avoir scruté chaque lignes, j'ai pas trouvé l'erreur. Elle est peut être plus générale.

          • Partager sur Facebook
          • Partager sur Twitter
            18 novembre 2021 à 17:22:07

            Problème réglé, j'avais juste oublié la ligne "userId" dans le data model des sauces.
            • Partager sur Facebook
            • Partager sur Twitter
              21 décembre 2022 à 11:40:53

              Merci pour le feedback @FlorentJouinot. J'ai pu résoudre mon problème via ton feedback

              • Partager sur Facebook
              • Partager sur Twitter

              Problème authentification projet 6

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown