Passport-jwt Cookie에 저장된 토큰 값 사용 방법

2022. 5. 16. 15:48Node.js, Express

Passport-jwt에서 지원 해주는 토큰 저장소가 있다.

 

fromHeader(field_name) = http header

fromBodyField = body

fromUrlQueryParameter = url query

fromAuthHeaderAsBearerToken = bearer

 

하지만 Cookie에 저장 된 토큰 값을 가져오지 못하는데 이 때

 

커스텀 함수를 작성하여 토큰 값 을 적용 해줄 수 있다.

 

1. cookieExtractor 함수에서 저장된 user 토큰값을 추출하고 return

2. jwtFromRequest에 cookieExtractor에서 받은 토큰 값 을 가져와 유저를 확인하고 done함수로 넘겨준다.

 

passport.ts 일부

const cookieExtractor = function (req: Request) {
  let token = null;
  if (req && req.cookies) {
    token = req.cookies['user'];
  }
  return token;
};

export const jwtPassport = passport.use(
  new JWTStrategy(
    {
      jwtFromRequest: cookieExtractor,
      secretOrKey: jwtSecret,
    },
    async (payload, done) => {
      try {
        const user = await User.findOne({ _id: payload._id }).select({
          _id: 1,
        });
        if (user) {
          done(null, payload);
        } else {
          done(null, false);
        }
      } catch (E: any) {
        done(E);
      }
    },
  ),
);

 

app.ts 일부분

app.use(
  '/game',
  jwtPassport.authenticate('jwt', {
    session: false,
    failureRedirect: '/login/token-fail',
  }),
  gameRouter,
);

 

출처 : 

http://www.passportjs.org/packages/passport-jwt/

https://stackoverflow.com/questions/39163413/node-js-passport-jwt-how-to-send-token-in-a-cookie

728x90
반응형