Kayıt Kuralları
Coddy'nin Node.js Journey'sinin Kimlik Doğrulama ve Güvenlik bölümünün bir parçası. Ders 7 / 24.
Şu anda herkes aynı adla veya 1 parolasıyla iki kez kaydolabilir. Kayıt işlemi, herhangi bir şeyi kaydetmeden önce aldığı verileri kontrol etmelidir.
İki durum kodu, neyin yanlış gittiğini belirtir. 400 Bad Request, isteğin kendisinin kabul edilemez olduğu anlamına gelir; örneğin parola çok kısadır. 409 Conflict, zaten sahip olduğunuz verilerle çakışma olduğu anlamına gelir; örneğin adın başkası tarafından alınmış olması.
Adların da tek bir yazımı olmalıdır. Ada ve ada, onları okuyan herkese aynı kişiyi çağrıştırır; bu nedenle adı kaydetmeden ve aramadan önce küçük harfe dönüştürün:
const email = String(req.body.email ?? '').trim().toLowerCase();
if (await subscribers.findOne({ email })) {
return res.status(409).json({ error: 'Already subscribed' });
}Görev
KolayŞu anda herkes aynı adla ya da 1 parolasıyla iki kez kaydolabilir. Kaydetmeden önce kaydolma isteğinde gelenleri denetle.
server.jsdosyasında,POST /signupişleyicisinin başında kullanıcı adını düzenle: etrafındaki boşlukları kaldır ve küçük harfe çevir; böylece" Ada ","ada"olur. Kullanıcı adı gönderilmemişse boş bir ad kullan.- Yine
POST /signupiçinde: ad boşsa veya parola 8 karakterden kısaysa, 400 durum koduyla{"error": "Pick a username and a password of at least 8 characters"}yanıtını ver. Tam 8 karakterlik bir parola yeterince uzundur. - Temizlenmiş bu ada sahip bir kullanıcı zaten varsa, 409 durum koduyla
{"error": "That username is taken"}yanıtını ver. - Aksi takdirde kullanıcıyı küçük harfli adla kaydet. 201 yanıtında kaydedilen ad gösterilir:
{"username": "ada"}; istek"Ada"demiş olsa bile. POST /loginiçinde, kullanıcıyı aramadan önce kullanıcı adını aynı şekilde düzenle. BöyleceADA,adahesabına giriş yapabilir.
Deneyin: Run düğmesine basın.
POST /signupisteğini{"username": "Ada", "password": "correct horse"}ile gönderin: durum kodu 201 ve{"username": "ada"}.POST /signupisteğini{"username": "ada", "password": "another password"}ile gönderin: durum kodu 409 ve "taken" hatası.POST /loginisteğini{"username": "ADA", "password": "correct horse"}ile gönderin: durum kodu 200 ve{"username": "ada"}.POST /signupisteğini{"username": "bob", "password": "1234"}ile gönderin: durum kodu 400.POST /signupisteğini yalnızca{"password": "correct horse"}ile gönderin: bunun için de durum kodu 400.
Kendin dene
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 });
});
// signup işleminin ne kaydettiğini gösterir. Yalnızca öğrenme amaçlıdır: gerçek bir uygulamada bu route asla bulunmaz.
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');
});
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Kimlik Doğrulama ve Güvenlik bölümündeki tüm dersler
Kendi başına pratik yap: Express playground