theonedev/onedev · error · NotAcceptableException
"Please login to perform this query"
Error message
"Please login to perform this query"
What it means
RequestedForChangesByMeCriteria builds a JPA predicate from the current thread-bound user (User.get()). When there is no authenticated user (anonymous), it cannot resolve 'me' and throws NotAcceptableException with a localized 'Please login to perform this query' message during query evaluation.
Source
Thrown at server-core/src/main/java/io/onedev/server/search/entity/pullrequest/RequestedForChangesByMeCriteria.java:28
import org.jspecify.annotations.Nullable;
import io.onedev.server.exception.NotAcceptableException;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.User;
import io.onedev.server.util.ProjectScope;
import io.onedev.server.util.criteria.Criteria;
public class RequestedForChangesByMeCriteria extends Criteria<PullRequest> {
private static final long serialVersionUID = 1L;
@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 RequestedForChangesByUserCriteria(user);
}
@Override
public String toStringWithoutParens() {
return PullRequestQuery.getRuleName(PullRequestQueryLexer.RequestedForChangesByMe);View on GitHub (pinned to d44925c47c)
Solutions
- Authenticate the request (login session or personal access token) before running the query.
- Replace 'requested for changes by me' with 'requested for changes by <username>' in queries executed anonymously or by services.
- Hide/remove *ByMe queries from dashboards accessible to anonymous users.
- For REST calls, add the Authorization header with a valid OneDev access token.
Example fix
// before GET /~api/query?query=requested for changes by me // no auth -> 405 // after curl -H "Authorization: Bearer <token>" '/~api/query?query=requested for changes by me'
Defensive patterns
Strategy: try-catch
Validate before calling
if (SecurityUtils.getUser() == null && query.contains("requested for changes by me"))
throw new NotAcceptableException("Login required for 'by me' queries"); Type guard
boolean canEvaluateByMeCriteria() { return SecurityUtils.getUser() != null; } Try / catch
try {
result = queryService.query(query);
} catch (NotAcceptableException e) {
if (e.getMessage().contains("Please login"))
promptAuthentication(); // or rewrite query with explicit user
else throw e;
} Prevention
- Always attach an access token to API query calls
- Rewrite *ByMe queries to explicit-user form in service code
- Hide *ByMe saved queries from anonymous users
When it happens
Trigger: Executing/evaluating a pull request query containing 'requested for changes by me' while unauthenticated — e.g. REST/GraphQL query calls without a session or access token, or rendering a saved query for anonymous visitors.
Common situations: API scripts missing authorization headers; saved queries shared with anonymous users; expired sessions where the UI still submits a *ByMe query.
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/66fc858263f904e7.
Report an issue: GitHub.