כללי הרשמה
חלק מהיחידה אימות ואבטחה במסלול ה-Node.js של Coddy. שיעור 3 מתוך 17.
כרגע כל אחד יכול להירשם פעמיים באותו שם, או עם הסיסמה 1. תהליך ההרשמה צריך לבדוק מה הוא מקבל לפני שהוא שומר משהו.
שני קודי סטטוס מציינים מה השתבש. 400 בקשה שגויה פירושו שהבקשה עצמה אינה תקינה, למשל סיסמה קצרה מדי. 409 התנגשות פירושו שהיא מתנגשת עם נתונים שכבר קיימים אצלך, למשל שם שכבר תפוס.
גם לשמות צריכה להיות צורת כתיבה אחידה. Ada ו-ada נראים כמו אותו אדם לכל מי שקורא אותם, לכן הפוך שם לאותיות קטנות לפני שאתה שומר אותו ולפני שאתה מחפש אותו:
const email = String(req.body.email ?? '').trim().toLowerCase();
if (await subscribers.findOne({ email })) {
return res.status(409).json({ error: 'Already subscribed' });
}אתגר
קלPOST /signupמחזיר 400{ error }בלי שם משתמש או עם סיסמה שאורכה פחות מ־8 תווים.- הוא מחזיר 409
{ error }כששם המשתמש כבר תפוס. - שמות משתמש נשמרים באותיות קטנות, ו־
POST /loginמקבל כל שילוב של אותיות גדולות וקטנות.
הירשם עם Ada, אחר כך עם ada, ואז התחבר בתור ADA. נסה גם את הסיסמה 1234.
נסו בעצמכם
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 שמר. לצורכי לימוד בלבד: באפליקציה אמיתית לעולם לא יהיה נתיב כזה.
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');
});
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.