theonedev/onedev · error · NotAcceptableException
Please login to perform this query
Error message
Please login to perform this query
What it means
ApprovedByMeCriteria.getPredicate resolves 'me' via User.get(); on an unauthenticated or non-web thread it throws NotAcceptableException('Please login to perform this query') instead of building a JPA predicate for the pull-request query.
Source
Thrown at server-core/src/main/java/io/onedev/server/search/entity/pullrequest/ApprovedByMeCriteria.java:34
import io.onedev.server.util.ProjectScope;
import io.onedev.server.util.criteria.Criteria;
public class ApprovedByMeCriteria extends ApprovedByCriteria {
private static final long serialVersionUID = 1L;
@Override
public User getUser() {
return SecurityUtils.getUser();
}
@Override
public Predicate getPredicate(@Nullable ProjectScope projectScope, CriteriaQuery<?> query, From<PullRequest, PullRequest> from, CriteriaBuilder builder) {
var user = User.get();
if (user != null)
return getCriteria(user).getPredicate(projectScope, query, from, builder);
else
throw new NotAcceptableException(_T("Please login to perform this query"));
}
@Override
public boolean matches(PullRequest request) {
var user = User.get();
if (user != null)
return getCriteria(user).matches(request);
else
throw new NotAcceptableException(_T("Please login to perform this query"));
}
private Criteria<PullRequest> getCriteria(User user) {
return new ApprovedByUserCriteria(user);
}
@Override
public String toStringWithoutParens() {
return PullRequestQuery.getRuleName(PullRequestQueryLexer.ApprovedByMe);View on GitHub (pinned to d44925c47c)
Solutions
- Authenticate the call (login session or access token) before running the query.
- Use 'approved by "<username>"' (ApprovedByUserCriteria) for headless contexts.
- Wrap evaluation in a block that establishes the intended user context.
- Catch NotAcceptableException and prompt the client to log in.
Example fix
// before query = "approved by me" // anonymous -> 406 // after query = "approved by \"alice\"" with Authorization header
Defensive patterns
Strategy: try-catch
Validate before calling
if (SecurityUtils.getUser() == null && queryText.contains("approved by me")) promptLogin(); Type guard
User u = User.get(); if (u != null) { /* safe */ } Try / catch
try { requests = pullRequestQueryService.query(...); } catch (NotAcceptableException e) { requireAuth(); } Prevention
- Attach API tokens to all pull-request query calls
- Rewrite 'me' queries with explicit usernames for automation
- Bind a user context in background jobs
- Treat HTTP 406 as login-required
When it happens
Trigger: Evaluating a pull-request query containing 'approved by me' (getPredicate) while anonymous: unauthenticated REST/GraphQL calls, scheduled jobs, or message handlers without a bound user.
Common situations: CI scripts querying pull requests with 'approved by me' using no token; webhooks/background processing evaluating user-relative queries; tests missing user setup.
Related errors
- Please login to perform this query
- Please login to perform this query
- Please login to perform this query
- Please login to perform this query
- Please login to perform this query
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/35e13bda0a553b39.
Report an issue: GitHub.