mattermost-community/focalboard · error
no user ID
Error message
no user ID
What it means
GetUser returns this error when called with an empty user ID string. The App layer guards before querying the store, since GetUserByID cannot resolve an empty identifier. It is a caller-input validation error, not a data problem.
Solutions
- Validate len(id) > 0 before calling GetUser
- Fix the data source so user IDs are populated before import
- Skip or substitute users with missing IDs during import
Example fix
// before
user, _ := app.GetUser(idFromJSON)
// after
if idFromJSON == "" {
return errors.New("import record missing user id")
}
user, err := app.GetUser(idFromJSON) Defensive patterns
Strategy: validation
Validate before calling
if id == "" {
return nil, errors.New("cannot look up user: id is empty")
} Type guard
func hasUserID(id string) bool { return strings.TrimSpace(id) != "" } Try / catch
user, err := a.GetUser(id)
if err != nil {
if err.Error() == "no user ID" {
return fmt.Errorf("skipping: no user id provided")
}
return errors.Wrap(err, "get user failed")
} Prevention
- Validate all entity IDs at the parse/import boundary
- Use custom ID types so empty IDs can't flow silently
- Log-and-skip records with missing IDs instead of failing the whole import
When it happens
Trigger: Calling a.GetUser("") — e.g. ImportBoardJSONL resolving a user ID that came back as an empty string from parsed JSONL fields.
Common situations: Board/user JSON imports with missing or blank owner/user id fields; unchecked string fields from webhook or API payloads used directly as user IDs.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- No User IDs
- at least one block is required
- at least one board is required
- block fields size limit exceeded
- block ids and patches need to match
AI-assisted analysis of mattermost-community/focalboard@a84bbb65e3 (2026-08-30).
Data as JSON: /api/errors/8bfa8ea5fba24227.
Report an issue: GitHub.
Appendix: source
Thrown at server/app/auth.go:57
return a.store.GetActiveUserCount(secondsAgo)
}
// GetWeeklyActiveUsers returns the number of weekly active users.
func (a *App) GetWeeklyActiveUsers() (int, error) {
secondsAgo := int64(SecondsPerMinute * MinutesPerHour * HoursPerDay * DaysPerWeek)
return a.store.GetActiveUserCount(secondsAgo)
}
// GetMonthlyActiveUsers returns the number of monthly active users.
func (a *App) GetMonthlyActiveUsers() (int, error) {
secondsAgo := int64(SecondsPerMinute * MinutesPerHour * HoursPerDay * DaysPerMonth)
return a.store.GetActiveUserCount(secondsAgo)
}
// GetUser gets an existing active user by id.
func (a *App) GetUser(id string) (*model.User, error) {
if len(id) < 1 {
return nil, errors.New("no user ID")
}
user, err := a.store.GetUserByID(id)
if err != nil {
return nil, errors.Wrap(err, "unable to find user")
}
return user, nil
}
func (a *App) GetUsersList(userIDs []string) ([]*model.User, error) {
if len(userIDs) == 0 {
return nil, errors.New("No User IDs")
}
users, err := a.store.GetUsersList(userIDs, a.config.ShowEmailAddress, a.config.ShowFullName)
if err != nil {
return nil, errors.Wrap(err, "unable to find users")
}View on GitHub (pinned to a84bbb65e3)