diff --git a/src/pages/Signup/Signup.tsx b/src/pages/Signup/Signup.tsx index 82e1eb2..59dc55c 100644 --- a/src/pages/Signup/Signup.tsx +++ b/src/pages/Signup/Signup.tsx @@ -51,8 +51,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](?:[A-Za-z0-9-]*[A-Za-z0-9])?$/.test(value)) { + errorMessage = "Enter a valid GitHub username"; } } @@ -67,8 +67,11 @@ const SignUp: React.FC = () => { if (name === "password") { if (!value.trim()) { errorMessage = "Password is required"; - } else if (!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/.test(value)) { - errorMessage = "Password must contain uppercase, lowercase, number, and special character"; + } else if ( + !/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$/.test(value) + ) { + errorMessage = + "Password must be 8+ characters with letters and numbers"; } } @@ -80,8 +83,8 @@ const SignUp: React.FC = () => { const usernameError = !formData.username.trim() ? "Username is required" - : !/^[A-Za-z\s]+$/.test(formData.username) - ? "Only letters are allowed" + : !/^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$/.test(formData.username) + ? "Enter a valid GitHub username" : ""; const emailError = !formData.email.trim() ? "Email is required" @@ -90,30 +93,37 @@ const SignUp: React.FC = () => { : ""; const passwordError = !formData.password.trim() ? "Password is required" - : !/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$/.test(formData.password) + : !/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$/.test( + formData.password, + ) ? "Password must be 8+ characters with letters and numbers" : ""; - if (usernameError || emailError || passwordError) { - setErrors({ username: usernameError, email: emailError, password: passwordError }); + setErrors({ + username: usernameError, + email: emailError, + password: passwordError, + }); return; } setIsLoading(true); try { - const response = await axios.post(`${backendUrl}/api/auth/signup`, formData, { withCredentials: true }); - setMessage(response.data.message); + const response = await axios.post( + `${backendUrl}/api/auth/signup`, + formData, // Include cookies for session + ); + setMessage(response.data.message); // Show success message from backend // Navigate to login page after successful signup - if (response.status === 201) { + if (response.data.message === "User created successfully") { navigate("/login"); } - } catch (error: unknown) { - if (axios.isAxiosError(error)) { - setMessage(error.response?.data?.message || "Something went wrong. Please try again."); - } else { - setMessage("Something went wrong. Please try again."); - } + } catch (error: any) { + setMessage( + error.response?.data?.message || + "Something went wrong. Please try again.", + ); } finally { setIsLoading(false); } @@ -135,105 +145,176 @@ const SignUp: React.FC = () => {

} > -
-
-
- - New account -
-
-

- Build your profile -

-

- Use a simple, guided signup flow with instant feedback while you type. -

+
+
+
+
+
+
+ +
+ +
+ Logo
-
- -
-