šŸš€ Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more →
Socket
Sign inDemoInstall
Socket

@arendajaelu/nestjs-passport-apple

Package Overview
Dependencies
Maintainers
0
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@arendajaelu/nestjs-passport-apple

Apple strategy for Passport in Nestjs

2.0.5
latest
Source
npm
Version published
Weekly downloads
3.8K
6.18%
Maintainers
0
Weekly downloads
Ā 
Created
Source

NestJS Passport Apple Strategy

This strategy seamlessly integrates Apple login capabilities into NestJS applications by leveraging Passport and its authentication framework.

Features

  • Supports NestJS v10 and v11
  • Utilizes Apple's OAuth2.0 for user authentication
  • Uses NestJS's AuthGuard for easy integration
  • Provides strongly-typed Profile object

Installation

npm install @arendajaelu/nestjs-passport-apple

Usage

Strategy Setup

Here's a full example detailing all available options:

import { Injectable } from '@nestjs/common';
import { AuthGuard, PassportStrategy } from '@nestjs/passport';
import { Strategy, Profile } from '@arendajaelu/nestjs-passport-apple';

const APPLE_STRATEGY_NAME = 'apple';

@Injectable()
export class AppleStrategy extends PassportStrategy(Strategy, APPLE_STRATEGY_NAME) {
  constructor() {
    super({
      clientID: process.env.APPLE_OAUTH_CLIENT_ID,
      teamID: process.env.APPLE_TEAMID,
      keyID: process.env.APPLE_KEYID,
      key: process.env.APPLE_KEY_CONTENTS,
      // OR
      keyFilePath: process.env.APPLE_KEYFILE_PATH,
      callbackURL: process.env.APPLE_OAUTH_CALLBACK_URL
      scope: ['email', 'name'],
      passReqToCallback: false,
    });
  }

  async validate(_accessToken: string, _refreshToken: string, profile: Profile) {
    return {
      emailAddress: profile.email,
      firstName: profile.name?.firstName || '',
      lastName: profile.name?.lastName || '',
    };
  }
}

@Injectable()
export class AppleOAuthGuard extends AuthGuard(APPLE_STRATEGY_NAME) {}

Note: Make sure to add AppleStrategy to the providers array in your module.

Using Guard in Controller

import { Controller, Get, Post, Req, UseGuards } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { AppleOAuthGuard } from './strategies/apple.strategy';

@ApiTags('oauth')
@Controller('oauth')
export class OAuthController {
  @Get('apple')
  @UseGuards(AppleOAuthGuard)
  async appleLogin() {}

  @Post('apple/callback')
  @UseGuards(AppleOAuthGuard)
  async appleCallback(@Req() req) {
    return req.user;
  }
}

Strategy Options

  • clientID: Apple OAuth2.0 Client ID
  • teamID: Apple Developer Team ID
  • keyID: Apple Key ID
  • key: Contents of the Apple Key. If you want the library to load the contents, use keyFilePath instead.
  • keyFilePath: File path to Apple Key; library will load content using fs.readFileSync
  • authorizationURL: (Optional) Authorization URL; default is https://appleid.apple.com/auth/authorize
  • tokenURL: (Optional) Token URL; default is https://appleid.apple.com/auth/token
  • scope: (Optional) An array of scopes, e.g., ['email', 'name']
  • sessionKey: (Optional) Session Key
  • state: (Optional) Should state parameter be used
  • passReqToCallback: (Optional) Should request be passed to the validate callback; default is false
  • callbackURL: (Optional) Callback URL

Validate Callback

The validate callback is called after successful authentication and contains the accessToken, refreshToken, and profile.

Tutorial: Apple Login with NestJS

For a detailed tutorial on implementing Apple Login with NestJS, refer to the following article:

How to Implement Apple Login with NestJS in Seconds

License

Licensed under MIT.

Keywords

passport

FAQs

Package last updated on 06 Feb 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts