@swalest/ws-auth
v2.4.4
Published
webSocket authentification with JWT
Readme
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=1hAlternatively, 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.
