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' });
}Aufgabe
EinfachPOST /signupantwortet 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 /loginakzeptiert 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');
});
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
4Eigentümer und Sicherheit
Nur deine NotizenAdmin-Rollen2Sitzungen und Cookies
Mit Cookies merkenLogin-Sitzungen