OAuthConsent shows an empty permissions list when only offline_access is requested
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 86/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- react, typescript
- Domain
- authentication, frontend
Research direction
Start in packages/ui/src/components/OAuthConsent/OAuthConsent.tsx and inspect how displayedScopes is filtered and how the permissions list group is rendered. Reproduce an authorization request with scope=offline_access only; done means the consent page no longer shows a blank permissions box, either by hiding the group or displaying the offline_access notice as a row.
Written by the indexing model from the issue text.
Description
Preliminary Checks
- I have reviewed the documentation: https://clerk.com/docs
- I have searched for existing issues: https://github.com/clerk/javascript/issues
- I have not already reached out to Clerk support via email or Discord (if you have, no need to open an issue here)
- This issue is not a question, general help request, or anything other than a bug report directly related to Clerk. Please ask questions in our Discord community: https://clerk.com/discord.
Reproduction
https://github.com/clerk/javascript/blob/main/packages/ui/src/components/OAuthConsent/OAuthConsent.tsx (any OAuth application; authorize with scope=offline_access only)
Publishable key
n/a — reproduces on any instance with a Clerk OAuth application
Description
<OAuthConsent /> renders the "This will allow {application} access to:" list group header even when the list is empty.
displayedScopes filters offline_access out (line ~152) and the scope is instead surfaced as the oauthConsent.offlineAccessNotice footer line. When an OAuth client requests only offline_access (Smithery's MCP connector does this against our server), the user sees the header over a blank box and nothing else in the permissions section. The only hint that anything was granted is the small footer sentence.
Steps:
- Register a Clerk OAuth application (we use it as the authorization server for a remote MCP server;
scopes_supportedadvertisesprofile email offline_access). - Start an authorization request with
scope=offline_accessand open the consent page. - Observe: "This will allow X access to:" header, empty list, then Deny/Allow.
Expected: either hide the list group when displayedScopes is empty, or render a row for offline_access (e.g. the text now in offlineAccessNotice), so the permissions box is never blank.
Screenshot from our consent page (Clerk-hosted component, custom appearance only): header present, list empty, footer notice present.
Environment
@clerk/nextjs 7.9.x (packages/ui OAuthConsent), Next.js App Router, custom consent path configured under Configure → Paths; observed 2026-09-22 with Smithery's OAuth client (client_id https://connect.smithery.ai/.well-known/oauth-client, DCR).
- Dominant language
- TypeScript
- Stars
- 1.8k
- Forks
- 472
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 193
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from clerk/javascript
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
clerk/javascript#9611 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
clerk/javascript#9573 ·
-
Difficulty 4/5 3-5 days Newbie friendliness 64/100
clerk/javascript#9775 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
clerk/javascript#9770 · 3 comments ·
-
Difficulty 3/5 1-2 days Newbie friendliness 68/100
clerk/javascript#9667 · 1 comment ·
All issues in clerk/javascript
Similar issues
-
Browser Waiting for: Product Owner
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
getsentry/sentry-javascript#24577 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
agilepathway/label-checker#640 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
copse-dev/agent-pane#2953 ·
-
agentic-workflows
Difficulty 1/5 Under an hour Newbie friendliness 85/100
githubnext/rig#534 ·
-
automation missing-model model-sync provider:pioneer
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
anomalyco/models.dev#7701 ·