Lorsque votre application Web doit "se souvenir" des utilisateurs, elle utilise généralement l'un des deux mécanismes suivants: les cookies ou les sessions. Un cookie est une petite zone de stockage dans le navigateur où vous pouvez conserver des données relatives à l'utilisateur comme les préférences de recherche, par exemple. Les sessions vous permettent de stocker des informations sensibles sur le serveur à la place.
Découvrez comment configurer des sessions dans un serveur Express propulsé par Node.js.
Ce dont vous aurez besoin
Pour suivre ce didacticiel, vous devez installer à la fois Node.js et npm. Toute version récente de Node.js devrait venir avec npm, un gestionnaire de paquets pour installer des dépendances.
Vous utiliserez npm pour installer Express et express-session. Ce sont les outils que vous utiliserez pour créer le serveur Web et la session.
Qu'est-ce qu'une session dans Node.js?
Un cookie est un petit fichier que votre navigateur utilise pour stocker des données. Vous pouvez utiliser des cookies pour stocker des données non sensibles telles que les préférences de recherche.
Vous ne devez pas stocker de données sensibles (telles que les noms d'utilisateur et les mots de passe) dans les cookies. Lorsque votre navigateur envoie des cookies via HTTP, ils sont vulnérables aux pirates qui peuvent être en mesure de les intercepter. Ils sont également stockés en texte brut sur votre ordinateur, de sorte que les pirates peuvent potentiellement les inspecter et voler vos données.
Au lieu d'enregistrer des données sensibles sous forme de cookie sur le client, vous devez les stocker sur le serveur. Cela le protège du monde extérieur.
Les sessions vous permettent de stocker des données sensibles dont votre application a besoin pour identifier l'utilisateur. Les exemples sont le nom d'utilisateur, le mot de passe et l'e-mail. Ils sont plus sécurisés car ils résident sur le serveur, pas sur le client.
Chaque fois que vous avez des données que vous souhaitez conserver entre les requêtes, enregistrez-les côté serveur à l'aide d'une session. Vous apprendrez à créer une session dans la section suivante.
Création d'une session dans un serveur express
Express est un framework Web populaire pour Node.js. Il vous permet de configurer une application de serveur Web qui écoute les demandes des clients au numéro de port que vous avez choisi. Vous pouvez créer des routes d'API, appliquer un middleware et même connecter l'application à une base de données, tout cela grâce aux API fournies par le framework.
1. Créer un projet Node.js
Créez un tout nouveau dossier pour votre projet, puis lancez votre outil de ligne de commande et cd dans ce dossier.
Ensuite, exécutez la commande suivante pour initialiser un projet Node.js :
npm init -y
Cela génère un fichier package.json dans le dossier racine du projet avec la configuration par défaut. Le fichier package.json pour l'exécution scripts npm.
2. Installer Express et express-session
Vous utiliserez Express pour créer l'application de serveur Web. Et express-session pour créer des sessions sur cette application serveur.
Sur le terminal, exécutez la commande suivante pour installer les deux dépendances :
npm i express session express
Après avoir installé les deux packages, l'étape suivante consiste à créer le serveur.
3. Créer des sessions dans l'application
Créez un fichier nommé App.js dans le dossier racine de votre projet et importez les dépendances :
constante exprimer = exiger('exprimer')
constante séance = exiger('session express')
app = express()
Ensuite, enregistrez le middleware de session. Passer un objet avec le secret propriété (pour signer le cookie sessionID) et le cookie.
app.use(
session({
secret: "quelque secret",
biscuit: { maxAge: 30000 },
saveNon initialisé: FAUX,
})
);
Ici, vous définissez l'âge maximal de la session à 30 secondes (30000 millisecondes). Définir saveUnitialized sur false est essentiel si vous avez un système de connexion. Si vous ne le faites pas, votre serveur générera un nouvel identifiant de session chaque fois que l'utilisateur enverra une requête.
Ensuite, créez une route de connexion pour changer de session. Lorsqu'un utilisateur accède à cette route, vous vous attendez à ce que le client envoie le nom d'utilisateur et le mot de passe dans le corps de la requête. Tout d'abord, vous accédez à ces valeurs et vérifiez si elles existent (et si l'utilisateur s'est authentifié) :
app.post("/connexion", (req, res) => {
constante { nom d'utilisateur, mot de passe } = req.body ;
si (Identifiant Mot de passe) {
si (req.session.authenticated) {
res.json (session);
} autre {
si (mot de passe "123") {
req.session.authenticated = vrai;
req.session.user = { nom d'utilisateur } ;
res.json (req.session);
} autre {
res.statut(403).json({ msg: "Mauvaises qualifications" });
}
}
} autre {
res.statut(403).json({ msg: "Mauvaises qualifications" });
}
});
Avec la première instruction if, vous effectuez une vérification factice. Cette vérification permet de s'assurer que vous ne continuez que si le nom d'utilisateur et le mot de passe sont présents.
Ensuite, vous vérifiez si l'utilisateur est déjà authentifié. Si tel est le cas, renvoyez la session au client. Si ce n'est pas le cas, définissez la propriété authentifiée sur true et enregistrez le nom d'utilisateur dans la session. Renvoyez-le ensuite au client.
Avec le code ci-dessus, le serveur se souviendra de chaque utilisateur qui envoie une requête au serveur. En effet, ils se sont authentifiés et ont enregistré leurs informations uniques (nom d'utilisateur et mot de passe) dans la session.
Démarrez votre serveur en ajoutant le code suivant au bas de App.js :
app.listen(3000, () => {
console.enregistrer("Le serveur tourne sur le port 3000");
});
Pour tester cette route, utilisez un client API pour envoyer une demande à la route de connexion que vous avez créée. Assurez-vous d'envoyer le nom d'utilisateur et le mot de passe dans le corps de la demande. Voici à quoi ressemblerait votre requête API si vous utilisiez Rest Client :
POST http ://localhost: 3000/connexion HTTP/1.1
Type de contenu: "applications/json"
{ nom d'utilisateur: "Kingley", mot de passe: "123"}
Si tout se passe bien, vous obtiendrez l'objet suivant :
{
"biscuit": {
"originalMaxAge": 30000,
"httpSeulement": vrai,
"chemin": "/"
},
"authentifié": vrai,
"utilisateur": {
"nom d'utilisateur": "Kingley",
"mot de passe": "123"
}
}
Avec ce code, deux choses se sont produites. Tout d'abord, vous vous êtes authentifié sur le serveur. Deuxièmement, la session contient maintenant vos informations de connexion, de sorte que le serveur sait maintenant qui vous êtes. Chaque fois que vous envoyez une nouvelle requête, elle se souviendra de vous jusqu'à ce que la session expire et que le serveur la supprime.
Les sessions améliorent l'expérience utilisateur
Les sessions sont une partie essentielle des applications Node.js. En effet, ils vous permettent de maintenir un état d'interaction entre de nombreuses demandes et réponses. Les sessions sont particulièrement importantes pour les applications qui nécessitent que vous vous connectiez.
Utilisez des sessions dans votre application backend pour suivre les données spécifiques à l'utilisateur. Un exemple de ces données est les articles que votre utilisateur a ajoutés à un panier.
Sans sessions, vous devriez gérer un magasin de données distinct pour chaque utilisateur de votre application. Cela serait inefficace et augmenterait la complexité de l'application.
Express.js simplifie les sessions, le routage, etc.
Express.js est le framework Web Node.js le plus populaire actuellement utilisé. Il fournit de nombreux outils et bibliothèques pour créer des applications backend, et la bibliothèque de session express n'est que l'un d'entre eux.
Si vous souhaitez utiliser Node.js pour le développement Web backend, consultez Express.