semaphoreui/semaphore · error

user with login not found

Error message

user with login %s not found

What it means

getTokenUser looks up the user with store.GetUserByLoginOrEmail; when the store returns db.ErrNotFound it is converted into 'user with login %s not found'. This means the --login value matched no user in the database.

Solutions

  1. List existing users (`semaphore user list`) and use an exact login from that output
  2. Create the user first with `semaphore user add` if it genuinely doesn't exist
  3. Confirm the config points at the intended database/environment

Example fix

// before
semaphore user token list --login jonh
// after
semaphore user list            # find correct login
semaphore user token list --login john
Defensive patterns

Strategy: validation

Validate before calling

LOGIN="$1"
semaphore user list | grep -Fx "$LOGIN" || { echo "user '$LOGIN' does not exist"; exit 1; }
semaphore user token list --login "$LOGIN"

Prevention

When it happens

Trigger: Running `semaphore user token create/list --login <name>` where <name> (or email) does not exist in the users table — a typo, a deleted user, or the wrong database/environment.

Common situations: Typo in username; running against a different environment's DB than intended; user was removed before token operations; case or exact-match differences in the login name.

Understand the failure class

Background: "User not found", "Invalid user", and "does not exist": what missing-user lookup errors mean across Rocket.Chat, LiteLLM, Phabricator, rustfs, and pnpm — this error's family across 10 libraries.

Related errors


AI-assisted analysis of semaphoreui/semaphore@1774ccb71a (2026-09-07). Data as JSON: /api/errors/7d775fe5860f9bd1. Report an issue: GitHub.

Appendix: source

Thrown at cli/cmd/user_token.go:54

}

var tokenCmd = &cobra.Command{
	Use:   "token",
	Short: "Manage user API tokens",
	Run: func(cmd *cobra.Command, args []string) {
		_ = cmd.Help()
		os.Exit(0)
	},
}

func getTokenUser(store db.Store, login string) (db.User, error) {
	if login == "" {
		return db.User{}, errors.New("argument --login required")
	}

	user, err := store.GetUserByLoginOrEmail(login, "")
	if errors.Is(err, db.ErrNotFound) {
		return db.User{}, fmt.Errorf("user with login %s not found", login)
	}
	if err != nil {
		return db.User{}, err
	}

	return user, nil
}

func createUserToken(store db.Store, out io.Writer, args tokenArgs) error {
	user, err := getTokenUser(store, args.login)
	if err != nil {
		return err
	}

	var expiresAt *time.Time
	if args.ttl != "" {
		d, err := time.ParseDuration(args.ttl)
		if err != nil {

View on GitHub (pinned to 1774ccb71a)