diff --git a/functions/handlers/users.js b/functions/handlers/users.js index a7687a9..32bd3fa 100644 --- a/functions/handlers/users.js +++ b/functions/handlers/users.js @@ -135,7 +135,7 @@ exports.login = (req, res) => { }) .catch((err) => { console.error(err); - if (err.code === "auth/wrong-password" || err.code === "auth/invalid-email") { + if (err.code === "auth/wrong-password" || err.code === "auth/invalid-email" || err.code === "auth/user-not-found") { return res .status(403) .json({ general: "Invalid credentials. Please try again." }); @@ -201,7 +201,7 @@ exports.updateProfileInfo = (req, res) => { // TODO: Add functionality for adding/updating profile images // Data validation - const { valid, errors, profileData } = validateUpdateProfileInfo(req.body); + const { valid, errors, profileData } = validateUpdateProfileInfo(req); if (!valid) return res.status(400).json(errors); // Update the database entry for this user diff --git a/functions/util/validator.js b/functions/util/validator.js index c2b1240..8265d6b 100644 --- a/functions/util/validator.js +++ b/functions/util/validator.js @@ -9,23 +9,39 @@ const isEmpty = (str) => { else return false; }; -exports.validateUpdateProfileInfo = (data) => { +exports.validateUpdateProfileInfo = (req) => { + const newData = req.body; + // const oldData = req.userData; let errors = {}; - let profileData = {}; + let profileData = req.userData; // ?: Should users be able to change their handles and emails? - // Only adds the key to the database if the values are not empty - if (!isEmpty(data.firstName)) profileData.firstName = data.firstName.trim(); - if (!isEmpty(data.lastName)) profileData.lastName = data.lastName.trim(); - if (!isEmpty(data.bio)) profileData.bio = data.bio.trim(); + // Deletes any unused keys so that they aren't stored in the database + if (newData.firstName) { + profileData.firstName = newData.firstName.toString().trim(); + } else { + delete profileData.firstName; + } - if (isEmpty(data.email)) { + if (newData.lastName) { + profileData.lastName = newData.lastName.toString().trim(); + } else { + delete profileData.lastName; + } + + if (newData.bio) { + profileData.bio = newData.bio.toString().trim(); + } else { + delete profileData.bio; + } + + if (isEmpty(newData.email)) { errors.email = "Must not be empty."; - } else if (!isEmail(data.email)) { + } else if (!isEmail(newData.email)) { errors.email = "Must be a valid email."; } else { - profileData.email = data.email; + profileData.email = newData.email; } return { diff --git a/twistter-frontend/src/pages/editProfile.js b/twistter-frontend/src/pages/editProfile.js index 3c3c51b..ff6f3f7 100644 --- a/twistter-frontend/src/pages/editProfile.js +++ b/twistter-frontend/src/pages/editProfile.js @@ -88,6 +88,14 @@ export class edit extends Component { handle: this.state.handle, bio: this.state.bio }; + + // Removes all keys from newProfileData that are empty, undefined, or null + Object.keys(newProfileData).forEach(key => { + if (newProfileData[key] === "" || newProfileData[key] === undefined || newProfileData[key] === null) { + delete newProfileData[key]; + } + }) + axios .post("/updateProfileInfo", newProfileData) .then((res) => {