From 49d9b50cb5d7fbf46b4d99be3e5bbf77e391a514 Mon Sep 17 00:00:00 2001 From: younha00 Date: Thu, 27 Jun 2024 10:14:46 +0900 Subject: [PATCH] =?UTF-8?q?[#2]Feat:=20=EB=84=A4=EC=9D=B4=EB=B2=84=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B4=80=EB=A0=A8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 로그인 관련하여 논의 필요함, 임시로 만들었 --- src/auth/guard/naver-auth-guard.ts | 23 +++++++++++++++ src/auth/strategy/naver.strategy.ts | 44 +++++++++++++++++++++++++++++ src/common/const/env-keys.const.ts | 6 ++++ 3 files changed, 73 insertions(+) create mode 100644 src/auth/guard/naver-auth-guard.ts create mode 100644 src/auth/strategy/naver.strategy.ts diff --git a/src/auth/guard/naver-auth-guard.ts b/src/auth/guard/naver-auth-guard.ts new file mode 100644 index 0000000..2105892 --- /dev/null +++ b/src/auth/guard/naver-auth-guard.ts @@ -0,0 +1,23 @@ +import { ExecutionContext, Injectable } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; + +@Injectable() +export class NaverAuthGuard extends AuthGuard('naver') { + constructor() { + super(); + } + + handleRequest( + err: any, + user: any, + info: any, + context: ExecutionContext, + status?: any, + ): TUser { + //에러가 존재하면 에러 처리로 넘긴다. + if (err || !user) { + throw err; + } + return user; + } +} diff --git a/src/auth/strategy/naver.strategy.ts b/src/auth/strategy/naver.strategy.ts new file mode 100644 index 0000000..01dd7fd --- /dev/null +++ b/src/auth/strategy/naver.strategy.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { PassportStrategy } from '@nestjs/passport'; +import { Strategy } from 'passport-naver-v2'; +import { AuthService } from '../auth.service'; +import { JwtService } from '@nestjs/jwt'; +import { + ENV_NAVER_CALLBACK_URL_KEY, + ENV_NAVER_CLIENT_ID_KEY, + ENV_NAVER_CLIENT_SECRET_KEY, +} from '../../common/const/env-keys.const'; + +@Injectable() +export class JwtNaverStrategy extends PassportStrategy(Strategy, 'naver') { + constructor( + private authService: AuthService, + private jwtService: JwtService, + private readonly configService: ConfigService, + ) { + super({ + clientID: configService.get(ENV_NAVER_CLIENT_ID_KEY), + clientSecret: configService.get(ENV_NAVER_CLIENT_SECRET_KEY), + callbackURL: configService.get(ENV_NAVER_CALLBACK_URL_KEY), + }); + } + + async validate( + accessToken: string, + refreshToken: string, + profile: any, + ): Promise { + console.log(profile); + const id = profile.id; + const email = profile.email; + const name = profile.name; + const user = { + id, + email, + name, + }; + + return user; + } +} diff --git a/src/common/const/env-keys.const.ts b/src/common/const/env-keys.const.ts index a30590c..5959816 100644 --- a/src/common/const/env-keys.const.ts +++ b/src/common/const/env-keys.const.ts @@ -14,3 +14,9 @@ export const ENV_DB_USERNAME_KEY = 'DB_USERNAME'; export const ENV_DB_PASSWORD_KEY = 'DB_PASSWORD'; export const ENV_DB_DATABASE_KEY = 'DB_DATABASE'; + +export const ENV_NAVER_CLIENT_ID_KEY = 'NAVER_CLIENT_ID'; + +export const ENV_NAVER_CLIENT_SECRET_KEY = 'NAVER_CLIENT_SECRET'; + +export const ENV_NAVER_CALLBACK_URL_KEY = 'NAVER_CALLBACK_URL';