Aturan Pendaftaran
Termasuk bagian Autentikasi dan Keamanan dalam perjalanan Node.js di Coddy. Pelajaran 3 dari 17.
Saat ini siapa pun bisa mendaftar dua kali dengan nama yang sama, atau dengan kata sandi 1. Proses pendaftaran harus memeriksa data yang diterimanya sebelum menyimpan apa pun.
Dua kode status menunjukkan masalah yang terjadi. 400 Bad Request berarti permintaannya sendiri tidak dapat diterima, seperti kata sandi yang terlalu pendek. 409 Conflict berarti permintaan bertentangan dengan data yang sudah kamu miliki, seperti nama yang sudah digunakan.
Nama juga harus memiliki satu ejaan. Ada dan ada tampak seperti satu orang bagi siapa pun yang membacanya, jadi ubah nama menjadi huruf kecil sebelum menyimpannya dan sebelum mencarinya:
const email = String(req.body.email ?? '').trim().toLowerCase();
if (await subscribers.findOne({ email })) {
return res.status(409).json({ error: 'Already subscribed' });
}Tantangan
MudahPOST /signupmemberikan respons 400{ error }jika tidak ada username atau jika password kurang dari 8 karakter.- Responsnya 409
{ error }untuk username yang sudah digunakan. - Username disimpan dalam huruf kecil, dan
POST /loginmenerima huruf besar maupun kecil.
Daftar dengan Ada, lalu ada, kemudian login sebagai ADA. Coba juga password 1234.
Coba sendiri
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 });
});
// Menampilkan data yang disimpan saat signup. Hanya untuk belajar: aplikasi sungguhan tidak pernah memiliki route ini.
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');
});
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Autentikasi dan Keamanan
4Pemilik dan Keamanan
Hanya CatatanmuPeran AdminLatihan sendiri: Playground Express