diff --git a/backend/cmd/start.sh b/backend/cmd/start.sh index e14e860..3066fcb 100755 --- a/backend/cmd/start.sh +++ b/backend/cmd/start.sh @@ -96,6 +96,8 @@ else fi if [ -n "${TUDUDI_USER_EMAIL:-}" ] && [ -n "${TUDUDI_USER_PASSWORD:-}" ]; then + # Trim whitespace/carriage returns that may come from docker-compose env vars + TUDUDI_USER_EMAIL=$(printf '%s' "$TUDUDI_USER_EMAIL" | tr -d '[:space:]') node scripts/user-create.js "$TUDUDI_USER_EMAIL" "$TUDUDI_USER_PASSWORD" true || exit 1 fi diff --git a/backend/models/user.js b/backend/models/user.js index b269e6e..d311a5d 100644 --- a/backend/models/user.js +++ b/backend/models/user.js @@ -237,6 +237,9 @@ module.exports = (sequelize) => { tableName: 'users', hooks: { beforeValidate: async (user) => { + if (user.email) { + user.email = user.email.trim().toLowerCase(); + } if (user.password) { user.password_digest = await bcrypt.hash( user.password, diff --git a/backend/modules/users/userService.js b/backend/modules/users/userService.js index 2c1b44b..3640b0e 100644 --- a/backend/modules/users/userService.js +++ b/backend/modules/users/userService.js @@ -11,12 +11,13 @@ const _ = require('lodash'); * @returns {Promise<{user: User, created: boolean}>} User object and creation status */ async function createOrUpdateUser(email, password) { + const normalizedEmail = email.trim().toLowerCase(); const hashedPassword = await bcrypt.hash(password, 10); const [user, created] = await User.findOrCreate({ - where: { email }, + where: { email: normalizedEmail }, defaults: { - email, + email: normalizedEmail, password_digest: hashedPassword, }, });