Menu
CoddyTech

Regeln für die Registrierung

Teil des Abschnitts Authentifizierung und Sicherheit der Node.js-Journey von Coddy. Lektion 3 von 17.

Derzeit kann sich jeder zweimal mit demselben Namen oder mit dem Passwort 1 anmelden. Bei der Anmeldung muss geprüft werden, was eingeht, bevor etwas gespeichert wird.

Zwei Statuscodes geben an, was schiefgelaufen ist. 400 Bad Request bedeutet, dass die Anfrage selbst nicht akzeptabel ist, etwa weil ein Passwort zu kurz ist. 409 Conflict bedeutet, dass sie mit bereits vorhandenen Daten kollidiert, etwa weil ein Name schon vergeben ist.

Namen müssen außerdem einheitlich geschrieben werden. Ada und ada wirken für alle, die sie lesen, wie ein und dieselbe Person. Wandle einen Namen daher in Kleinbuchstaben um, bevor du ihn speicherst und bevor du danach suchst:

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

Aufgabe

Einfach
  • POST /signup antwortet mit 400 { error }, wenn kein Benutzername angegeben wird oder das Passwort weniger als 8 Zeichen hat.
  • Bei einem bereits vergebenen Benutzernamen antwortet es mit 409 { error }.
  • Benutzernamen werden in Kleinbuchstaben gespeichert, und POST /login akzeptiert jede Groß- und Kleinschreibung.

Registriere Ada, dann ada, und melde dich anschließend als ADA an. Probiere auch das Passwort 1234 aus.

Probier es selbst

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 });
});

// Zeigt, was bei der Registrierung gespeichert wurde. Nur zu Lernzwecken: Eine echte App hat niemals eine solche 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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Authentifizierung und Sicherheit