mattermost-community/focalboard · error

The email already exists

Error message

The email already exists

What it means

RegisterUser returns this when a user with the requested email already exists. The store lookup by email found a live record, so registration is refused to keep emails unique.

Source

Thrown at server/app/auth.go:167

	if username != "" {
		var err error
		user, err = a.store.GetUserByUsername(username)
		if err != nil && !model.IsErrNotFound(err) {
			return err
		}
		if user != nil {
			return errors.New("The username already exists")
		}
	}

	if user == nil && email != "" {
		var err error
		user, err = a.store.GetUserByEmail(email)
		if err != nil && !model.IsErrNotFound(err) {
			return err
		}
		if user != nil {
			return errors.New("The email already exists")
		}
	}

	// TODO: Move this into the config
	passwordSettings := auth.PasswordSettings{
		MinimumLength: 6,
	}

	err := auth.IsPasswordValid(password, passwordSettings)
	if err != nil {
		return errors.Wrap(err, "Invalid password")
	}

	_, err = a.store.CreateUser(&model.User{
		ID:          utils.NewID(utils.IDTypeUser),
		Username:    username,
		Email:       email,
		Password:    auth.HashPassword(password),

View on GitHub (pinned to a84bbb65e3)

Solutions

  1. Use a different email address
  2. Detect the existing account and send a 'you already have an account' / login link instead of registering
  3. Pre-check with store.GetUserByEmail and handle ModelErrNotFound before calling

Example fix

// before
err := app.RegisterUser(sameEmail, name, password)
// after
if existing, _ := app.Store.GetUserByEmail(sameEmail); existing != nil {
    return errors.New("an account with this email already exists; please log in")
}
err := app.RegisterUser(sameEmail, name, password)
Defensive patterns

Strategy: validation

Validate before calling

if existing, err := store.GetUserByEmail(email); err == nil && existing != nil {
    return fmt.Errorf("an account with email %s already exists", email)
}

Type guard

func emailTaken(u *model.User) bool { return u != nil }

Try / catch

err := a.RegisterUser(email, username, password)
if err != nil {
    if strings.Contains(err.Error(), "already exists") {
        return ErrEmailTaken
    }
    return errors.Wrap(err, "registration failed")
}

Prevention

When it happens

Trigger: a.RegisterUser(email, ...) with a non-empty email where store.GetUserByEmail(email) returns an existing user.

Common situations: Second signup with the same email; re-inviting an already-registered member; import data containing emails of existing users; dev DBs copied between environments.

Related errors


AI-assisted analysis of mattermost-community/focalboard@a84bbb65e3 (2026-08-30). Data as JSON: /api/errors/73d7e73f6b68d3f4. Report an issue: GitHub.