2017-09-14 4 views
0

Je souhaite écrire une API REST avec NodeJS + Restify et PassportJS pour l'authentification. Lorsque l'utilisateur se connecte, je génère un sessionId et le stocke dans une session que je crée moi-même.req.user is undefined

var Passport    = require('passport'); 
var PassportBearerStrategy = require('passport-http-bearer').Strategy; 
// Authentication 
Passport.use(new PassportBearerStrategy(function(sessionId, cb) { 
    Auth.getSession(sessionId, function(userId){ 
     cb((!!userId), { userId: userId }, userId); 
    }); 
})); 

server.get(
    '/user', 
    Passport.authenticate('bearer'), 
    function(req, res, next){ 
     console.info(req.user ); // undefined 
     respond(res, {}); 
     return next(); 
    } 
); 

Tout fonctionne, sauf que dans le soufflet de fonction, req.user est undefined. Je lis, que vous devez activer la session. Mais j'ai déjà mis en place ma propre session, je n'en ai pas besoin d'autre.
Tout ce dont j'ai besoin est que, si je dis cb(true, user), il arrive dans la fonction ci-dessous.

Y at-il un moyen de résoudre ce problème?

+1

Je n'ai jamais utilisé cette stratégie, seulement la stratégie locale. Sur local, vous devez avoir une fonction sérialiser et désérialiser l'utilisateur. C'est la fonction de désarchivage qui vous donne l'utilisateur qui sera plus tard accessible via req.user. Ne manquez-vous pas cette fonction? – yBrodsky

+0

@yBrodsky, Vous avez raison, ces fonctions sont manquantes. Je les ai ajouté exactement comme décrit ici: https://stackoverflow.com/questions/27637609/understanding-passport-serialize-deserialize Mais req.user est encore indéfini. – TSM

Répondre

1

Comme je reçois du code this example le rappel cb suit le format de nœud standard, donc obtient une erreur en tant que premier argument et l'utilisateur en tant que second. Je pense que ce rappel est ce qui définit req.user et gérer tous les messages standard post-auth. Vous devriez essayer de l'appeler comme `cb (null, user)