Vérification des rôles & amp; authentification avec Passport.js
Donc, je voudrais faire quelques routes dans une API qui vous montrera les différentes données de base sur le rôle de l'utilisateur, définies dans MongoDB. Voici un échantillon de ce que j'ai en ce moment, il fonctionne...
router.get('/test', passport.authenticate('bearer', {session: false}), function (req, res) {
if (req.user.role == "premium") {
return res.send('you can see this content');
}
else {
return res.send('you can not see this content');
}
})
Cependant, l'objectif final est de présenter au moins quelque chose à l'utilisateur, même si elles n'êtes pas connecté ou authentifié avec le bon type de rôle.
router.get('/test', passport.authenticate('bearer', {session: false}), function (req, res) {
if (req.user.role == "premium") {
return res.send('this is premium content');
}
else {
//could be hit by another role, or no user at all
return res.send([some truncated version of the premium content]);
}
})
Qui est je pense que je ferais comprendre comment travailler, mais je ne sais pas comment spécifier le même itinéraire qui pourrait éventuellement être frapper sans aucune Autorisation de l'en-tête de la demande.
Est-ce possible dans le Passeport.js/Express?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Je vous suggère d'utiliser les codes d'état HTTP et un objet d'erreur, c'est une API commune de la convention et il permet à votre les utilisateurs de l'API pour savoir ce qui se passe et pourquoi:
Disclaimer: je travaille à Stormpath et nous avons mis beaucoup de pensée dans l'API d'authentification et de conception, nous avons vraiment une présentation sur le thème:
https://stormpath.com/blog/designing-rest-json-apis/
La solution est de limiter le contenu de la vue plutôt que de la route.
premiumContent.jade
La solution que j'ai trouvé ma réponse est d'utiliser une adaptation de la Passportjs.org de la documentation.
Dans les itinéraires, j'ai besoin de renvoyer des données, si un utilisateur est connecté ou non je peux utiliser quelque chose comme: