Normalize username and email to lowercase on user forms

User creation and editing now convert usernames and emails to lowercase in frontend forms and backend logic to ensure consistency and prevent duplicate accounts with case variations. Birthdate is also converted to ISO format during migration for data uniformity.
This commit is contained in:
João Vitória Silva
2025-10-05 21:24:58 +01:00
parent 1eb54a6a91
commit 2c193203d6
4 changed files with 10 additions and 6 deletions

View File

@@ -27,6 +27,8 @@ def process_migration_6(db: Session):
for user in users:
try:
user.username = user.username.lower()
if user.birthdate:
user.birthdate = user.birthdate.isoformat()
user_converted = users_schema.UserRead.model_validate(user)
user_crud.edit_user(user.id, user_converted, db)

View File

@@ -345,6 +345,8 @@ def edit_user(user_id: int, user: users_schema.UserRead, db: Session):
# Delete the user photo in the filesystem
users_utils.delete_user_photo_filesystem(db_user.id)
user.username = user.username.lower()
# Dictionary of the fields to update if they are not None
user_data = user.model_dump(exclude_unset=True)
# Iterate over the fields and update the db_user dynamically

View File

@@ -637,8 +637,8 @@ async function submitAddUserForm() {
if (isPasswordValid.value) {
const data = {
name: newEditUserName.value,
username: newEditUserUsername.value,
email: newEditUserEmail.value,
username: newEditUserUsername.value.toLowerCase(),
email: newEditUserEmail.value.toLowerCase(),
city: newEditUserCity.value,
birthdate: newEditUserBirthDate.value,
preferred_language: newEditUserPreferredLanguage.value,
@@ -680,9 +680,9 @@ async function submitEditUserForm() {
try {
const data = {
id: props.user.id,
username: newEditUserUsername.value,
username: newEditUserUsername.value.toLowerCase(),
name: newEditUserName.value,
email: newEditUserEmail.value,
email: newEditUserEmail.value.toLowerCase(),
city: newEditUserCity.value,
birthdate: newEditUserBirthDate.value,
gender: newEditUserGender.value,

View File

@@ -370,8 +370,8 @@ const submitForm = async () => {
// Prepare data for submission
const data = {
name: signUpName.value,
username: signUpUsername.value,
email: signUpEmail.value,
username: signUpUsername.value.toLowerCase(),
email: signUpEmail.value.toLowerCase(),
password: signUpPassword.value,
preferred_language: signUpPreferredLanguage.value,
city: signUpCity.value || null,