[typescript] Nest.js에서 타입스크립트를 사용한 소셜 로그인 처리

Nest.js는 TypeScript로 작성된 서버 사이드 어플리케이션을 빌드하기 위한 프레임워크이며, 소셜 로그인을 구현할 때도 효율적으로 사용될 수 있습니다.

소셜 로그인이란?

소셜 로그인은 사용자가 별도의 계정을 생성하지 않고 소셜 미디어 계정(예: 구글, 페이스북, 트위터 등)을 통해 로그인할 수 있는 기능을 말합니다.

Nest.js와 Passport를 이용한 소셜 로그인 구현

Nest.js에서는 Passport 모듈을 통해 간편하게 소셜 로그인을 구현할 수 있습니다. 또한, Passport 모듈을 사용함으로써 OAuth 또는 OpenID 기반의 인증을 손쉽게 처리할 수 있습니다.

@Module({
  imports: [
    PassportModule,
    AuthModule,
  ],
  providers: [AuthService, GoogleStrategy],
  controllers: [AuthController],
})
export class AuthModule {}

위의 예제에서 GoogleStrategy는 구글 OAuth를 사용한 로그인 전략을 정의한 클래스입니다.

아래는 GoogleStrategy 클래스의 예제입니다.

@Injectable()
export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
  constructor(private readonly authService: AuthService) {
    super({
      clientID: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_SECRET,
      callbackURL: 'http://localhost:3000/auth/google/callback',
      passReqToCallback: true,
      scope: ['email', 'profile'],
    });
  }

  async validate(request: any, accessToken: string, refreshToken: string, profile, done: Function) {
    const { name, emails, photos } = profile;
    const user = await this.authService.validateOAuthLogin(emails[0].value, 'google');
    if (!user) {
      return done(null, false);
    }

    done(null, user);
  }
}

GoogleStrategy 클래스는 Passport의 PassportStrategy를 상속하고, validate 메서드를 구현하여 사용자 정보를 기반으로 인증을 수행합니다.

마치며

Nest.js와 Passport를 사용하여 타입스크립트로 간단하게 소셜 로그인을 구현할 수 있습니다. 소셜 로그인을 통해 사용자들은 더 편리하게 어플리케이션에 접속할 수 있고, 애플리케이션의 사용자 경험을 향상시킬 수 있습니다.

참고 자료