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://fastcampus.co.kr/classroom/239666
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr
학습 페이지
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 |