Menu
CoddyTech

Règles d’inscription

Fait partie de la section Authentification et sécurité du Journey Node.js de Coddy. Leçon 3 sur 17.

Pour l’instant, n’importe qui peut s’inscrire deux fois avec le même nom, ou avec le mot de passe 1. L’inscription doit vérifier ce qu’elle reçoit avant d’enregistrer quoi que ce soit.

Deux codes d’état indiquent ce qui n’a pas fonctionné. 400 Bad Request signifie que la requête elle-même n’est pas acceptable, par exemple si le mot de passe est trop court. 409 Conflict signifie qu’il y a un conflit avec des données déjà présentes, par exemple si le nom est déjà pris.

Les noms doivent aussi avoir une seule orthographe. Ada et ada semblent désigner la même personne à quiconque les lit ; mettez donc un nom en minuscules avant de l’enregistrer et avant de le rechercher :

const email = String(req.body.email ?? '').trim().toLowerCase();
if (await subscribers.findOne({ email })) {
    return res.status(409).json({ error: 'Already subscribed' });
}
challenge icon

Défi

Facile
  • POST /signup répond avec le code 400 { error } sans nom d’utilisateur ou avec un mot de passe de moins de 8 caractères.
  • Il répond avec le code 409 { error } si le nom d’utilisateur est déjà pris.
  • Les noms d’utilisateur sont stockés en minuscules, et POST /login accepte n’importe quelle casse.

Inscris-toi avec Ada, puis ada, puis connecte-toi en tant que ADA. Essaie aussi le mot de passe 1234.

Essayez vous-même

import express from 'express';
import { users } from './db.js';
import { hashPassword, verifyPassword } from './passwords.js';

const app = express();
app.use(express.json());

app.post('/signup', async (req, res) => {
    const { username, password } = req.body;
    await users.insertOne({ username, passwordHash: await hashPassword(password) });
    res.status(201).json({ username });
});

app.post('/login', async (req, res) => {
    const { username, password } = req.body;
    const user = await users.findOne({ username });
    if (!user || !(await verifyPassword(password, user.passwordHash))) {
        return res.status(401).json({ error: 'Wrong username or password' });
    }
    res.json({ username: user.username });
});

// Affiche ce que signup a enregistré. À des fins pédagogiques uniquement : une véritable application n’expose jamais cette route.
app.get('/debug/users/:username', async (req, res) => {
    const user = await users.findOne({ username: req.params.username });
    res.json(user ? { username: user.username, passwordHash: user.passwordHash } : null);
});

app.listen(3000, () => {
    console.log('Vault is running on port 3000');
});
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Authentification et sécurité