feat(auth): implement Google and Zalo OAuth backend strategies

Add complete OAuth2 authentication flow for Google and Zalo providers:
- OAuthService: handles account linking (by email/phone), new user
  creation for OAuth-only accounts, and JWT token generation
- GoogleOAuthStrategy: passport-google-oauth20 integration
- ZaloOAuthStrategy: custom OAuth2 implementation using Zalo's API
  (authorization URL generation, code exchange, user info fetch)
- OAuthController: redirect and callback endpoints for both providers
  with httpOnly cookie-based token management
- Unit tests for OAuthService (7 tests), GoogleOAuthStrategy (4 tests),
  and ZaloOAuthStrategy (7 tests)
- OAuth env vars added to .env.example and env-validation warnings

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-08 14:14:02 +07:00
parent bac3313873
commit 23bb380d34
14 changed files with 1068 additions and 2 deletions

View File

@@ -22,6 +22,10 @@ const REQUIRED_WHEN_USED: ReadonlyMap<string, string> = new Map([
['ZALOPAY_KEY2', 'ZaloPay payments'],
['MINIO_ACCESS_KEY', 'Media storage'],
['MINIO_SECRET_KEY', 'Media storage'],
['GOOGLE_CLIENT_ID', 'Google OAuth'],
['GOOGLE_CLIENT_SECRET', 'Google OAuth'],
['ZALO_APP_ID', 'Zalo OAuth'],
['ZALO_APP_SECRET', 'Zalo OAuth'],
]);
export function validateEnv(): void {