Session
Les sessions HTTP offrent un moyen de stocker des informations sur l’utilisateur à travers plusieurs requêtes, ce qui est particulièrement utile pour les applications MVC.
Utiliser avec Express (par défaut)
Tout d’abord, installez le package requis (et ses types pour les utilisateurs de TypeScript) :
$ npm i express-session$ npm i -D @types/express-session
Une fois l’installation terminée, appliquez le middleware express-session
en tant que middleware global (par exemple, dans votre fichier main.ts
) :
import * as session from 'express-session';// quelque part dans votre fichier d'initialisationapp.use( session({ secret: 'my-secret', resave: false, saveUninitialized: false, }),);
Le secret
est utilisé pour signer le cookie de session ID. Cela peut être soit une chaîne pour un secret unique, soit un tableau de plusieurs secrets. Si un tableau de secrets est fourni, seul le premier élément sera utilisé pour signer le cookie de session ID, tandis que tous les éléments seront considérés lors de la vérification de la signature dans les requêtes. Le secret lui-même ne doit pas être facilement déchiffrable par un humain et serait mieux sous la forme d’un ensemble de caractères aléatoires.
Activer l’option resave
force la session à être enregistrée à nouveau dans le magasin de sessions, même si la session n’a jamais été modifiée pendant la requête. La valeur par défaut est true
, mais l’utilisation de la valeur par défaut a été dépréciée, car celle-ci changera à l’avenir.
De même, activer l’option saveUninitialized
force une session qui est “non initialisée” à être sauvegardée dans le magasin. Une session est non initialisée lorsqu’elle est nouvelle mais non modifiée. Choisir false
est utile pour mettre en œuvre des sessions de connexion, réduire l’utilisation du stockage serveur ou se conformer aux lois qui nécessitent une autorisation avant de définir un cookie. Choisir false
aidera également avec les conditions de concurrence où un client effectue plusieurs requêtes parallèles sans session (source).
Vous pouvez passer plusieurs autres options au middleware session
, lisez-en plus à leur sujet dans la documentation API.
Avec cela en place, vous pouvez désormais définir et lire les valeurs de session depuis les gestionnaires de route, comme suit :
@Get()findAll(@Req() request: Request) { request.session.visits = request.session.visits ? request.session.visits + 1 : 1;}
Alternativement, vous pouvez utiliser le décorateur @Session()
pour extraire un objet de session de la requête, comme suit :
@Get()findAll(@Session() session: Record<string, any>) { session.visits = session.visits ? session.visits + 1 : 1;}
Utiliser avec Fastify
Tout d’abord, installez le package requis :
$ npm i @fastify/secure-session
Une fois l’installation terminée, enregistrez le plugin fastify-secure-session
:
import secureSession from '@fastify/secure-session';
// quelque part dans votre fichier d'initialisationconst app = await NestFactory.create<NestFastifyApplication>( AppModule, new FastifyAdapter(),);await app.register(secureSession, { secret: 'averylogphrasebiggerthanthirtytwochars', salt: 'mq9hDxBVDbspDR6n',});
Lisez plus sur les options disponibles dans le dépôt officiel.
Avec cela en place, vous pouvez maintenant définir et lire les valeurs de session depuis les gestionnaires de route, comme suit :
@Get()findAll(@Req() request: FastifyRequest) { const visits = request.session.get('visits'); request.session.set('visits', visits ? visits + 1 : 1);}
Alternativement, vous pouvez utiliser le décorateur @Session()
pour extraire un objet de session de la requête, comme suit :
@Get()findAll(@Session() session: secureSession.Session) { const visits = session.get('visits'); session.set('visits', visits ? visits + 1 : 1);}