m1k1o/neko · warning · ErrMemberInvalidPassword

invalid password

Error message

invalid password

What it means

ErrMemberInvalidPassword is a sentinel error in the neko types package signaling that the supplied password does not match the stored hash for a member during credential checks. It is returned by Login and by MemberProvider.Authenticate when the username exists but authentication fails because of a wrong password (not because the user is missing).

Source

Thrown at server/pkg/types/member.go:8

package types

import "errors"

var (
	ErrMemberAlreadyExists   = errors.New("member already exists")
	ErrMemberDoesNotExist    = errors.New("member does not exist")
	ErrMemberInvalidPassword = errors.New("invalid password")
)

type MemberProfile struct {
	Name string `json:"name"`

	// permissions
	IsAdmin               bool `json:"is_admin"                 mapstructure:"is_admin"`
	CanLogin              bool `json:"can_login"                mapstructure:"can_login"`
	CanConnect            bool `json:"can_connect"              mapstructure:"can_connect"`
	CanWatch              bool `json:"can_watch"                mapstructure:"can_watch"`
	CanHost               bool `json:"can_host"                 mapstructure:"can_host"`
	CanShareMedia         bool `json:"can_share_media"          mapstructure:"can_share_media"`
	CanAccessClipboard    bool `json:"can_access_clipboard"     mapstructure:"can_access_clipboard"`
	SendsInactiveCursor   bool `json:"sends_inactive_cursor"    mapstructure:"sends_inactive_cursor"`
	CanSeeInactiveCursors bool `json:"can_see_inactive_cursors" mapstructure:"can_see_inactive_cursors"`

	// plugin scope
	Plugins PluginSettings `json:"plugins"`

View on GitHub (pinned to b0f01cedea)

Solutions

  1. Retry authentication with the correct password.
  2. Reset the member's password (UpdatePassword) or recreate the member with the intended credentials.
  3. Confirm the client is connecting to the intended server instance whose member store matches the credentials.
  4. Check that the provider's password hashing/verification configuration hasn't changed between versions.
  5. Log failed-login attempts (without logging the password) to distinguish typos from attacks.
Defensive patterns

Strategy: try-catch

Validate before calling

// caller-side sanity check before sending
if username == "" || password == "" {
    return errors.New("username and password required")
}

Try / catch

_, _, err := manager.Login(username, password)
if errors.Is(err, types.ErrMemberInvalidPassword) {
    // surface 'wrong password' to user; apply rate limiting
    return
}
return err

Prevention

When it happens

Trigger: Login(username, password) where the password hash comparison fails; MemberProvider.Authenticate with a mismatched password for an existing user.

Common situations: Typo or wrong keyboard layout when typing credentials; stale credentials after a password change; clients caching old tokens/passwords; environment configs loading credentials from a different member store than expected.

Related errors


AI-assisted analysis of m1k1o/neko@b0f01cedea (2026-09-01). Data as JSON: /api/errors/f5cdabf6d2ec2525. Report an issue: GitHub.