2017-10-03 3 views
-4

Je suis relativement nouveau sur node.js et essaye d'écrire une route qui va vérifier l'autorisation de tous les utilisateurs si le point de terminaison mentionné commence par/api. J'ai lu cela pour une valeur optionnelle? peut être utilisé {_id?} comme ceci mais est-il possible de l'utiliser comme {?}. et comment j'appelle cette route dans une autre route qui fait réellement le travail de la méthode GET?can/path/{?} Peut-il être utilisé dans nodejs?

Actuellement, la méthode ressemble à ceci

server.route({ 
method: 'GET', 
     path: '/api/something/nothing/{_id?}', 
     handler: function (request, reply) { 
      Controller.vcontroller.get(request.headers.authorization, request.params, function (err, success) { 
       console.log(request.headers); 
       console.log(request.headers.authorization); 
       if (err) { 
        reply(func.sendError(err)); 
       } else { 
        reply(func.sendSuccess(APP_CONSTANTS.STATUS_MSG.SUCCESS.DEFAULT, success)).code(200); 
       } 
      }); 
     }, 
     config: { 
      description: 'desc', 
      tags: ['api', 'order'], 
      validate: { 
       headers: func.authorizationHeaderObj, 
       params: { 
        order_id: Joi.string().required().trim(), 
        _id: Joi.string().optional().trim() 
       }, 
       failAction: func.failActionFunction 
      }, 
      plugins: { 
       'hapi-swagger': { 
        responseMessages: APP_CONSTANTS.swaggerDefaultResponseMessages 
       } 
      } 
     } 
    } 
}); 

quand je passe endpoint/api il doit vérifier l'autorisation de tous les utilisateurs pour GET PUT POST & SUPPRIMER respectivement.

En d'autres termes, je veux autorisation globale qui est itinéraire spécifique

Pouvez-vous suggérer une façon de le mettre en œuvre?

+1

Vous avez vraiment besoin de fournir un petit échantillon de code. –

+1

Mise à jour de la question. – Anamika

Répondre

0

Je ne suis pas tout à fait clair que je comprends votre question, donc je vais répéter ce que je pense que vous demandez, puis répondre. Si je ne comprends pas, veuillez clarifier. Ce que je pense que vous demandez est si vous pouvez exécuter une vérification chaque fois que quelqu'un frappe un chemin d'URL qui commence par /api, probablement à des fins d'autorisation de l'utilisateur.

La réponse est, oui, vous pouvez simplement incorporer dans un middleware (bien que je recommande fortement Passport pour tous vos besoins d'authentification.

Cela dit, si vous utilisez Express, vous pouvez simplement ajouter middleware au début de votre routage comme ceci:

app.use('/api', (req, res, next) => { 
    // trivial implementation, not for production 
    const users = ['bob', 'mari', 'hasan']; 
    if (users.indexOf(req.user) >= 0) { 
    // user is authorized 
    return next(); 
    } 
    // Forbidden 
    return res.sendStatus(403); 
}); 

Mettez cette avant vos autres routes, et toute voie en commençant par /api passera par cette première Evidemment, je suppose que vous avez peuplé req.user ici en quelque sorte, mais si. vous utilisez Passport comme je le suggère Sted qui sera fait pour vous.

1

Pour vérifier si toutes les demandes de points d'extrémité en commençant par/api sont autorisés, vous pouvez utiliser le middleware, à savoir

app.use('/api', (req, res, next) => { 
    // this uses passport.js for auth, you could use something else 
    if(req.isAuthenticated()) { 
    return next(); 
    }else{ 
    return res.status(401).send(); 
    } 
}); 
+0

Alors, quels changements seraient nécessaires dans la route existante et comment cela affecterait la réponse? – Anamika

+0

Cela dépend de votre méthode d'authentification ma réponse a été concernant votre question initiale – linasmnew

+0

Pourquoi quelqu'un-la réponse ... la question initiale demandait s'il était possible de vérifier toutes les demandes aux points finaux se terminant par/api – linasmnew