1. Početna
  2. Tehnologija & Gadgeti
  3. Kako implementirati Google autentifikaciju u NestJS aplikaciji?

Kako implementirati Google autentifikaciju u NestJS aplikaciji?

NestJS je moćan okvir za izgradnju servera koji koristi TypeScript, a popularan je zbog svoje modularne arhitekture i podrške za različite vrste autentifikacije. Jedna od najčešće korištenih metoda autentifikacije u modernim web aplikacijama je Google autentifikacija. U ovom članku istražit ćemo kako implementirati Google autentifikaciju u NestJS aplikaciji, korak po korak.

Prvo, potrebno je osigurati da imamo osnovno znanje o NestJS-u i njegovim osnovnim konceptima, kao što su moduli, servisi i kontroleri. Također, trebat će nam Google API ključevi, koje možemo dobiti putem Google Developers Console. Kreirajte novi projekt na Google Developers Console, aktivirajte Google+ API i generirajte OAuth 2.0 ključeve. Ovi ključevi će vam omogućiti autentifikaciju korisnika putem Googlea.

Nakon što imamo ključeve, slijedi instalacija potrebnih paketa za NestJS. Otvorite terminal i pokrenite sljedeću naredbu:

npm install @nestjs/passport passport passport-google-oauth20

Ovi paketi će nam omogućiti korištenje Passport strategije za Google autentifikaciju. Zatim, kreiramo novu strategiju. U mapi src kreirajte novu mapu pod nazivom auth, a unutar nje datoteku google.strategy.ts. U tu datoteku dodajte sljedeći kod:

import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-google-oauth20';

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

  async validate(accessToken: string, refreshToken: string, profile: any) {
    return { userId: profile.id, username: profile.displayName, email: profile.emails[0].value };
  }
}

Ova strategija koristi Google OAuth2 za autentifikaciju korisnika. U funkciji validate, možemo definirati što se događa kada se korisnik uspješno autentificira. Ovdje vraćamo osnovne informacije o korisniku koje možemo koristiti kasnije u aplikaciji.

Nakon što smo definirali strategiju, trebamo je registrirati u našem auth modulu. U datoteci auth.module.ts dodajte Google strategiju u providers:

import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { GoogleStrategy } from './google.strategy';

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

Sada kada imamo strategiju registriranu, možemo definirati rute za autentifikaciju. U datoteci auth.controller.ts dodajte sljedeće rute:

import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Controller('auth')
export class AuthController {
  @Get('google')
  @UseGuards(AuthGuard('google'))
  async googleAuth() {
    // Ova ruta preusmjerava korisnika na Google login
  }

  @Get('google/callback')
  @UseGuards(AuthGuard('google'))
  googleAuthRedirect() {
    // Ovdje se korisnik preusmjerava nakon uspješne autentifikacije
    return { message: 'Uspješno ste se prijavili putem Googlea!' };
  }
}

U ovoj klasi definiramo dvije rute: prva ruta preusmjerava korisnika na Google login, dok druga ruta prima callback od Googlea nakon što se korisnik uspješno prijavi. Kada se korisnik prijavi, možemo ga preusmjeriti ili vratiti neku poruku, kao što je prikazano u kodu.

Na kraju, ne zaboravite definirati varijable okruženja za GOOGLE_CLIENT_ID i GOOGLE_CLIENT_SECRET u vašem .env datoteci. Ove varijable koristimo kako bismo osigurali tajne podatke i olakšali konfiguraciju aplikacije.

To je to! Sada ste uspješno implementirali Google autentifikaciju u svoju NestJS aplikaciju. Ovaj proces omogućuje vam da olakšate autentifikaciju korisnicima, koristeći njihove postojeće Google račune, što može značajno poboljšati korisničko iskustvo i sigurnost vaše aplikacije.

Was this article helpful?

Related Articles

Leave a Comment