AdguardTeam/AdGuardHome · error

searching session by token: %w

Error message

searching session by token: %w

What it means

The auth middleware could not query the session store when resolving a session cookie into a user. The wrapped error comes from the sessions storage backend (e.g. JSON file or database).

Source

Thrown at internal/home/authhttp.go:528

	}

	return mw.userFromRequestBasicAuth(ctx, r)
}

// userFromCookie tries to retrieve a user based on the provided cookie value.
func (mw *authMiddlewareDefault) userFromCookie(
	ctx context.Context,
	val string,
) (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 {

View on GitHub (pinned to b41aefbe51)

Solutions

  1. Check the wrapped error and AdGuard Home logs for the storage-level cause
  2. Verify the working directory/sessions file is writable and not corrupted (restore from backup or delete sessions.json to force re-login)
  3. Avoid running two AdGuard Home instances against the same data directory
  4. Restart the service if a transient file lock was the cause
Defensive patterns

Strategy: try-catch

Try / catch

// Treat storage errors as 500; only nil,nil means anonymous
u, err := userFromRequest(r)
if err != nil { http.Error(w, "internal", 500); return }

Prevention

When it happens

Trigger: GET of any authenticated endpoint with a valid session cookie when Sessions.FindByToken returns an I/O, parse, or lock error from the session storage.

Common situations: Corrupted or concurrently-written sessions.json, permission problems on the data directory, disk issues.

Related errors


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