AdguardTeam/AdGuardHome · error

searching user by login %q: %w

Error message

searching user by login %q: %w

What it means

A session cookie resolved to a valid session, but loading the user by login from the users storage failed. The wrapped error indicates the user store (JSON/DB) backend error, not a missing user.

Source

Thrown at internal/home/authhttp.go:537

) (u *aghuser.User, err error) {
	t, err := sessionTokenFromHex(val)
	if err != nil {
		// Don't wrap the error because it's informative enough as is.
		return nil, err
	}

	s, err := mw.sessions.FindByToken(ctx, t)
	if err != nil {
		return nil, fmt.Errorf("searching session by token: %w", err)
	}

	if s == nil {
		return nil, nil
	}

	u, err = mw.users.ByLogin(ctx, s.UserLogin)
	if err != nil {
		return nil, fmt.Errorf("searching user by login %q: %w", s.UserLogin, err)
	}

	return u, nil
}

// sessionTokenFromHex converts a hexadecimal string into a session token.
func sessionTokenFromHex(val string) (token aghuser.SessionToken, err error) {
	sess, err := hex.DecodeString(val)
	if err != nil {
		return token, fmt.Errorf("decoding value: %w", err)
	}

	l := aghuser.SessionTokenLength

	err = validate.Equal("token length", l, len(sess))
	if err != nil {
		// Don't wrap the error because it's informative enough as is.
		return token, err

View on GitHub (pinned to b41aefbe51)

Solutions

  1. Inspect the wrapped error to identify the storage failure
  2. Check/repair the users storage file in the working directory
  3. Ensure single instance and correct file permissions
  4. As a last resort, recreate the users store (users will need re-provisioning)
Defensive patterns

Strategy: try-catch

Try / catch

// On user-store errors, force re-login rather than retrying
if err != nil { clearSessionCookie(w); redirect to login }

Prevention

When it happens

Trigger: userFromCookie with a session whose s.UserLogin lookup via Users.ByLogin returns an error (I/O, parse, or consistency failure).

Common situations: Users file corrupted or being rewritten concurrently, schema mismatch after downgrade, permission issues on data dir.

Related errors


AI-assisted analysis of AdguardTeam/AdGuardHome@b41aefbe51 (2026-08-27). Data as JSON: /api/errors/2e7d23f2d92208da. Report an issue: GitHub.