Aller au contenu principal

Validation des Payloads

Le monde des WebSockets est le "Far West". Un client malicieux peut envoyer n'importe quoi comme données JSON. Si tu attends un objet { message: string } et qu'on t'envoie null, ton serveur peut crasher.

Le décorateur @SocketSchema utilise le validateur interne de Fastify pour sécuriser tes événements.

Utilisation

Tu définis un schéma JSON pour le body du message.

import { SocketSchema, SubscribeMessage } from 'my-fastify-decorators';

const MessageSchema = {
body: {
type: 'object',
required: ['content', 'roomId'],
properties: {
content: { type: 'string', maxLength: 500 },
roomId: { type: 'string' }
}
}
};

@WebSocketGateway()
export class SecureGateway {

@SubscribeMessage('send_msg')
@SocketSchema(MessageSchema)
handleMessage(socket: Socket, payload: any) {
// Si on arrive ici, payload est GARANTI valide par AJV.
console.log(payload.content);
}
}

Que se passe-t-il en cas d'erreur ?

Si la validation échoue, le handler handleMessage n'est pas exécuté. À la place, le serveur émet automatiquement un événement error vers le client fautif avec les détails de l'erreur.

Exemple de réponse reçue par le client :

{
"event": "send_msg",
"message": "Validation failed",
"errors": [ ... liste des erreurs AJV ... ]
}

AJV = Validateur de fastify