2017-05-14 3 views
1

표현하기가 새로 생겨서 사용자가 내 앱에 로그인 할 때 세션을 만들려고합니다. 인증에 여권을 사용하고 있습니다. 로그인하는 사용자는 기본 전략을 만들고 기본 전략의 성공에 따라 쿠키에서 클라이언트 측에 저장하는 JWT 토큰을 만들고 있으며 이후 요청에 JWT 전략을 사용합니다.auth 헤더가 변경되면 Express가 다른 세션을 만듭니다.

하지만 JWT 헤더가있는 후속 호출에 대해 Basic 헤더와 다른 세션이있는 로그인 할 때 express-session이 하나의 세션을 생성하는 것을 알 수 있습니다. 여기

는이 코드를 디버깅 할 때 req.sessionID 한 sessionID와를 보여줍니다 내가 로그인

signin = function(req, res, next) { 
    passport.authenticate('basic', function(err, user, info) { 
     if (err) { return next(err) } 
     if (!user) { 
      return res.status(401).json({ error: 'message' }); 
     } 
     var token = jwt.encode({ user: user}, config.db.secret); 
     res.cookie('token', token, { maxAge: 900000, httpOnly: true, path: '\/', Secure: true }); 
     res.status(200).json({ success: true, firstName: user.firstName }); 
     delete user.password; 
     req.session.user = user; 
     req.session.save(); 
    })(req, res, next); 
}; 

에 세션을 저장하고하지만 내 코드이며 다음 코드 req.sessionID에서 다른 sessionID와를 표시하는 JWT 인증

listProducts = function(req, res) { 
    debugger; 
    //here req.session.user is undefined which I have saved at login. and sessionID is also different 
    res.json({ demo: 'response' }); 
}; 

으로 나는 내 응용 프로그램에서 사용자가 로그인 할 때까지 수명주기 전반에 걸쳐 동일한 sessionID와 것으로 기대하고있다. 왜 이런 일이 발생합니까? 그것에 대한 해결책은 무엇입니까?

+0

당신이 앱에 명시 세션 및 여권 미들웨어를 추가하는 코드를 추가 할 수 있습니까? – arboreal84

답변

1

세션을 저장하기 전에 응답을 보내고 있습니다.

세션을 저장 한 다음 응답을 보내보십시오.

express-session

는 순차적 커플 링을 도입 express-session 특정 작업을 수행 할 res.end을 수정하면 있었다의 피해자 : https://github.com/expressjs/session/blob/master/index.js#L249

+0

나는 그것을 시도한다. 그러나 운 없음. –

+0

'session.save'는 ** 비동기 **입니다. 즉 콜백을받습니다. 응답 전송 코드를 콜백 내에 배치합니다. 예 :'req.session.save (function (err) {if (err) {next (err)}} res.status (200) .json (...)}); ' – arboreal84

+0

여전히 나는 passport.session을 이해하고 express.sesssion은 스스로 처리해야합니다. 그러나 어쨌든 그것은 내 경우에는 작동하지 않습니다. –