serializeUser와 deserializeUser 에러나는 분들께

passport 관련 타이핑이 또 업데이트 되었네요.

types/index.d.ts에 다음 코드를 추가하고

import IUser from '../models/user';

declare global {
    namespace Express {
        export interface User extends IUser {}
   }
}

passport/index.ts를 다음과 같이 바꾸세요.
 passport.serializeUser((userdone=> {
    done(nulluser.id);
 });
  passport.deserializeUser<number>(async (iddone=> {
    try {
      const user = await User.findOne({
        where: { id },
     });
      if (!user) {
        return done(new Error('no user'));
     }
      return done(nulluser); // req.user
    } catch (err) {
      console.error(err);
      return done(err);
   }
});

덤으로 req.user도 req.user!.toJSON() as User 할 필요 없게 되었습니다. 그냥 req.user 쓰시면 됩니다.

tsconfig.json에는 ts-node 부분 추가하셔야 합니다.
{
"ts-node": {
"files": true
},
"compilerOptions": {
"strict": true,
"lib": ["es2020"],
"esModuleInterop": true,
"moduleResolution": "node",
"typeRoots": ["./types"]
}
}
admin 프로필
admin 2021.04.20 passport.serializeUser((user : User, done) => { done(null, user.id); }); serializeUser에서 이렇게 작성하는게 User를 타입으로 쓰는 건가요?