diff --git a/backend/controllers/userAuth.controller.js b/backend/controllers/userAuth.controller.js index dc1632e7e..6031d65f7 100644 --- a/backend/controllers/userAuth.controller.js +++ b/backend/controllers/userAuth.controller.js @@ -1,14 +1,15 @@ const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); +const { z } = require('zod'); const mongoose = require('mongoose'); -const { loginSchema } = require('../utils/input.validation'); +const { loginSchema, signupSchema } = require('../utils/input.validation'); module.exports.signup = async (req, res) => { try { const project = req.project; // Zod Validation (Prevents NoSQL Injection too) - const { email, password, ...otherData } = loginSchema.parse(req.body); + const { email, password, username, ...otherData } = signupSchema.parse(req.body); const collectionName = `${project._id}_users`; const collection = mongoose.connection.db.collection(collectionName); @@ -22,9 +23,9 @@ module.exports.signup = async (req, res) => { const hashedPassword = await bcrypt.hash(password, salt); const newUser = { + username, email, password: hashedPassword, - ...otherData, createdAt: new Date() }; diff --git a/backend/package-lock.json b/backend/package-lock.json index 3a6dc4ad1..aa1f1d206 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12 +1,12 @@ { "name": "urbackend", - "version": "1.0.0", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "urbackend", - "version": "1.0.0", + "version": "0.1.0", "license": "MIT", "dependencies": { "@supabase/supabase-js": "^2.84.0", diff --git a/backend/utils/input.validation.js b/backend/utils/input.validation.js index 03d8c4852..dff435db7 100644 --- a/backend/utils/input.validation.js +++ b/backend/utils/input.validation.js @@ -10,6 +10,21 @@ module.exports.loginSchema = z.object({ .max(100, { message: "Password is too long." }) }); +module.exports.signupSchema = z.object({ + username: z.string() + .min(3, { message: "Username must be at least 3 characters." }) + .max(30, { message: "Username is too long." }), + + email: z.string() + .min(1, { message: "Email is required." }) + .email({ message: "Invalid email format." }) + .max(100, { message: "Email is too long." }), + + password: z.string() + .min(6, { message: "Password must be at least 6 characters." }) + .max(100, { message: "Password is too long." }) +}); + module.exports.changePasswordSchema = z.object({ currentPassword: z.string().min(1, "Current password is required"), newPassword: z.string().min(6, "New password must be at least 6 characters")