From 348ea606a122094e426aa000571df1dd66399725 Mon Sep 17 00:00:00 2001 From: Tanish Solanki Date: Tue, 26 May 2026 08:40:11 +0530 Subject: [PATCH] fix: align frontend auth validation with backend --- backend/validators/authValidator.js | 6 +-- src/pages/Signup/Signup.tsx | 66 +++++++++++++---------------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/backend/validators/authValidator.js b/backend/validators/authValidator.js index ab4dac07..4fd9fac6 100644 --- a/backend/validators/authValidator.js +++ b/backend/validators/authValidator.js @@ -6,8 +6,8 @@ const signupSchema = z.object({ .min(3, "Username must be at least 3 characters long") .max(30, "Username must be at most 30 characters long") .regex(/^[a-zA-Z0-9_]+$/, "Username can only contain letters, numbers, and underscores") - , - + , + email: z.string() .trim() .toLowerCase() @@ -18,7 +18,7 @@ const signupSchema = z.object({ .min(8, "Password must be at least 8 characters long") .max(100, "Password must be at most 100 characters long") .regex( - /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$/, + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}+$/, 'Password must contain uppercase, lowercase, number, and special character' ), }); diff --git a/src/pages/Signup/Signup.tsx b/src/pages/Signup/Signup.tsx index 2ac51dcc..d862756b 100644 --- a/src/pages/Signup/Signup.tsx +++ b/src/pages/Signup/Signup.tsx @@ -39,8 +39,8 @@ const SignUp: React.FC = () => { if (name === "username") { if (!value.trim()) { errorMessage = "Username is required"; - } else if (!/^[A-Za-z\s]+$/.test(value)) { - errorMessage = "Only letters are allowed"; + } else if (!/^[a-zA-Z0-9_]+$/.test(value)) { + errorMessage = "Username can contain only letters, numbers, and underscores"; } } if (name === "email") { @@ -65,18 +65,18 @@ const SignUp: React.FC = () => { const usernameError = !formData.username.trim() ? "Username is required" : !/^[A-Za-z\s]+$/.test(formData.username) - ? "Only letters are allowed" - : ""; + ? "Only letters are allowed" + : ""; const emailError = !formData.email.trim() ? "Email is required" : !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email.trim()) - ? "Enter a valid email" - : ""; + ? "Enter a valid email" + : ""; const passwordError = !formData.password.trim() ? "Password is required" : !/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$/.test(formData.password) - ? "Password must be 8+ characters with letters and numbers" - : ""; + ? "Password must be 8+ characters with letters and numbers" + : ""; if (usernameError || emailError || passwordError) { setErrors({ username: usernameError, email: emailError, password: passwordError }); return; @@ -101,32 +101,27 @@ const SignUp: React.FC = () => { return (
@@ -148,17 +143,15 @@ const SignUp: React.FC = () => { initial={{ opacity: 0, y: 30 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.6, delay: 0.2 }} - className={`rounded-3xl p-6 sm:p-10 shadow-2xl border ${ - mode === "dark" - ? "bg-white/10 backdrop-blur-xl border-white/20 text-white" - : "bg-white border-gray-200 text-black" - }`} + className={`rounded-3xl p-6 sm:p-10 shadow-2xl border ${mode === "dark" + ? "bg-white/10 backdrop-blur-xl border-white/20 text-white" + : "bg-white border-gray-200 text-black" + }`} > - +

Create Account

@@ -231,9 +224,8 @@ const SignUp: React.FC = () => {
);