2.4.4 • Published 3 months ago

@swalest/ws-auth v2.4.4

Weekly downloads
-
License
ISC
Repository
-
Last release
3 months ago

NestJS JWT Authentication Package with WebSocket Support

šŸ›”ļø Overview

This package provides a secure and scalable JWT authentication system for NestJS, including HTTP and WebSocket authentication guards.

It supports:
āœ… JWT authentication with @nestjs/jwt
āœ… WebSocket authentication via WsAuthGuard
āœ… Token validation and error handling
āœ… User injection into WebSocket clients

šŸ“¦ Installation

Install the package using npm or yarn:

npm install @swalest/ws-auth
# or
yarn add @swalest/ws-auth

šŸš€ Usage 1ļøāƒ£ Import AuthModule into your application

import { Module } from '@nestjs/common';
import { AuthModule } from '@swalest/ws-auth';

@Module({
  imports: [AuthModule],
})
export class AppModule {}

2ļøāƒ£ Protect WebSocket connections with WsAuthGuard

import {
  WebSocketGateway,
  OnGatewayConnection,
  ConnectedSocket,
  UseGuards,
} from '@nestjs/websockets';
import { Socket } from 'socket.io';
import { WsAuthGuard, AuthService } from '@swalest/ws-auth';

@WebSocketGateway()
export class ChatGateway implements OnGatewayConnection {
  constructor(private readonly authService: AuthService) {}

  @UseGuards(WsAuthGuard)
  handleConnection(@ConnectedSocket() socket: Socket) {
    try {
      const user = this.authService.getUserFromSocket(socket);
      console.log('User connected:', user);
    } catch (error) {
      socket.emit('error', { message: error.message });
      socket.disconnect();
    }
  }
}

3ļøāƒ£ Extract the authenticated user in WebSocket

Once authenticated, the user is attached to the socket and can be accessed in your WebSocket handlers:

@UseGuards(WsAuthGuard)
handleMessage(@ConnectedSocket() socket: Socket, data: any) {
  console.log('Authenticated user:', (socket as any).user);
}

šŸ” Authentication Service

You can manually validate tokens using the AuthService:

import { AuthService } from '@swalest/ws-auth';

constructor(private readonly authService: AuthService) {}

const user = this.authService.validateToken(jwtToken);
console.log('Decoded user:', user);

šŸ“œ Configuration

This package uses environment variables for JWT settings. Add the following to your .env file:

JWT_SECRET=mySuperSecretKey
JWT_EXPIRES_IN=1h

Alternatively, configure it in AuthModule:

JwtModule.register({
  secret: process.env.JWT_SECRET || 'secret',
  signOptions: { expiresIn: process.env.JWT_EXPIRES_IN || '1h' },
});

šŸ› ļø Error Handling

If the authentication fails:

The WebSocket client is disconnected
An exception event is emitted:
socket.emit('Exception', { code: 403, message: 'Invalid token' });

šŸ“ License

This project is licensed under the MIT License. See the LICENSE file for details. šŸ¤ Contributing

We welcome contributions! Feel free to submit pull requests or open issues.

1.1.0

4 months ago

2.1.2

4 months ago

2.2.0

4 months ago

2.1.1

4 months ago

2.0.2

4 months ago

2.1.3

4 months ago

2.2.4

4 months ago

2.1.5

4 months ago

2.4.4

3 months ago

2.0.0

4 months ago

1.0.7

4 months ago

1.0.5

4 months ago

1.0.4

4 months ago

1.0.1

4 months ago

1.0.0

4 months ago