728x90

- jwt

yarn add @nestjs/passport passport passport-jwt
yarn add --dev @types/passport-jwt

 

// jwt.strategy.ts
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private readonly configService: ConfigService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      //   ignoreExpiration: false, // 기본값 false 임.
      secretOrKey: configService.get<string>('ACCESS_TOKEN_SECRET'),
    });
  }
  validate(payload: any) {
    return payload;
  }
}
  @UseGuards(AuthGuard('jwt'))
  @Get('private')
  async private(@Req() req) {
    return req.user;
  }

- 오타 방지를 위해

export class JwtAuthGuard extends AuthGuard('jwt') {}

extends 만들고

  @UseGuards(JwtAuthGuard)

이렇게 적용 도 가능


++ codecamp 보고 만든것들

// jwt-access.strategy.ts

export class JwtAccessStrategy extends PassportStrategy(Strategy, 'access') {
  constructor(private readonly configService: ConfigService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: configService.get<string>('ACCESSTOKEN_SECRET'),
    });
  }

  validate(payload: IStrategyPayload) {
    // console.log(payload);

    return {
      userNumber: payload.sub,
    };
  }
}
// jwt-refresh.strategy.ts

export class JwtRefreshStrategy extends PassportStrategy(Strategy, 'refresh') {
  constructor(private readonly configService: ConfigService) {
    super({
      jwtFromRequest: (req: Request) => {
        const cookie = req.headers.cookie;
        const refreshToken = cookie.replace('refreshToken=', '');
        return refreshToken;
      },
      secretOrKey: configService.get<string>('REFRESHTOKEN_SECRET'),
    });
  }

  validate(payload: IStrategyPayload) {
    // console.log(payload);

    return {
      userNumber: payload.sub,
    };
  }
}
// jwt-social-kakao.strategy.ts

export class JwtKakaoStrategy extends PassportStrategy(Strategy, 'kakao') {
  constructor(private readonly configService: ConfigService) {
    super({
      clientID: configService.get<string>('SOCIAL_KAKAO_ID'),
      clientSecret: configService.get<string>('SOCIAL_KAKAO_SECRET'),
      callbackURL: `${configService.get<string>('SOCIAL_CALLBACK_URL')}/kakao`,
      // scope: ['email'],
    });
  }

  validate(accessToken: string, refreshToken: string, profile: Profile) {
    // console.log(profile);

    return {
      id: profile.id,
      provider: profile.provider,
    };
  }
}

- local (안쓸듯)

body 데이터 처리함 => 아이디,비번 로그인

yarn add @nestjs/passport passport passport-local
yarn add --dev @types/passport-local

 

// local.strategy.ts
@Injectable()
export class LocalStrategy extends PassportStrategy(Strategy, 'local') {
  constructor(private readonly authService: AuthService) {
    super({
      usernameField: 'email',
    });
  }

  async validate(email: string, password: string) {
    const user = await this.authService.authenticate(email, password);

    return user;
  }
}
  @UseGuards(AuthGuard('local'))
  @Post('login/passport')
  loginUserPassport(@Req() req) {
    return req.user;
  }

 

 

- passport 패치키들

https://www.passportjs.org/

 

 

https://fastcampus.co.kr/classroom/239666

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr

 

https://www.inflearn.com/course/lecture?courseSlug=%EB%B6%80%ED%8A%B8%EC%BA%A0%ED%94%84-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B3%A0%EB%86%8D%EC%B6%95-%EC%BD%94%EC%8A%A4&unitId=159182&tab=curriculum&subtitleLanguage=ko

 

학습 페이지

 

www.inflearn.com

 

728x90

'코딩 > Nest.js' 카테고리의 다른 글

Guard 실사용적  (0) 2024.10.23
Middleware  (0) 2024.10.22
JWT  (0) 2024.10.22
Mapped Type  (0) 2024.10.22
Pipe  (2) 2024.10.22

+ Recent posts