Menu
CoddyTech

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' });
}
challenge icon

Görev

Kolay

Şu anda herkes aynı adla ya da 1 parolasıyla iki kez kaydolabilir. Kaydetmeden önce kaydolma isteğinde gelenleri denetle.

  1. server.js dosyasında, POST /signup iş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.
  2. Yine POST /signup iç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.
  3. Temizlenmiş bu ada sahip bir kullanıcı zaten varsa, 409 durum koduyla {"error": "That username is taken"} yanıtını ver.
  4. 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.
  5. POST /login içinde, kullanıcıyı aramadan önce kullanıcı adını aynı şekilde düzenle. Böylece ADA, ada hesabına giriş yapabilir.

Deneyin: Run düğmesine basın.

  • POST /signup isteğini {"username": "Ada", "password": "correct horse"} ile gönderin: durum kodu 201 ve {"username": "ada"}.
  • POST /signup isteğini {"username": "ada", "password": "another password"} ile gönderin: durum kodu 409 ve "taken" hatası.
  • POST /login isteğini {"username": "ADA", "password": "correct horse"} ile gönderin: durum kodu 200 ve {"username": "ada"}.
  • POST /signup isteğini {"username": "bob", "password": "1234"} ile gönderin: durum kodu 400.
  • POST /signup isteğ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');
});
quiz iconKendini test et

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