2017-09-14 16 views
0

인증을 위해 NodeJS + Restify 및 PassportJS를 사용하여 REST-API를 작성하고 싶습니다. 사용자가 로그인하면 sessionId를 생성하여 세션에 저장합니다.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(); 
    } 
); 

모든 기능 우는 소리에, req.userundefined 것을 제외하고 작동합니다. 나는 세션을 활성화해야한다는 것을 알았다. 하지만 이미 내 세션을 구현 했으므로 다른 세션이 필요하지 않습니다.
내가 필요한 건, cb(true, user)라고 말하면 아래 함수에 도착한다는 것입니다.

이 문제를 해결할 방법이 있습니까?

+1

나는 그 전략을 한번도 사용하지 않았고 오직 지역 전략 만 사용했다. 로컬에서는 사용자를 직렬화 및 비 직렬화하는 함수가 있어야합니다. req.user를 통해 나중에 액세스 할 수있는 사용자를 제공하는 desarialize 함수입니다. 이 기능이 없습니까? – yBrodsky

+0

@yBrodsky, 네가 맞다.이 기능들이 빠져있다. https://stackoverflow.com/questions/27637609/understanding-passport-serialize-deserialize req.user는 아직 정의되지 않았습니다. – TSM

답변

1

코드에서 this example으로 콜백 cb이 표준 노드 형식을 따르므로 첫 번째 인수로 오류가 발생하고 두 번째로 오류가 발생합니다. 콜백은 req.user를 설정하고 모든 사후 인증 상용구를 관리하는 것이라고 생각합니다. 당신은 그것을`cb (null, user)로 부르려고 시도해야한다.