fix(api): Remove x-dev-user-id auth bypass from assessment endpoint - #1247
Open
jeromehardaway wants to merge 1 commit into
Open
fix(api): Remove x-dev-user-id auth bypass from assessment endpoint#1247jeromehardaway wants to merge 1 commit into
jeromehardaway wants to merge 1 commit into
Conversation
The assessment API honored an x-dev-user-id header with no environment gate, letting any caller read or write any user's assessment data in production. Identity now comes from the authenticated session only via requireAuth; regression tests prove the header is ignored.
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
There was a problem hiding this comment.
Pull request overview
Removes an authentication bypass on /api/user/assessment by eliminating the x-dev-user-id header path and enforcing that user identity always comes from the authenticated session via the shared requireAuth wrapper (closing #1169).
Changes:
- Replaced
getSession({ req })+x-dev-user-idheader logic withrequireAuthandreq.user.id-based identity. - Added Vitest regression coverage to ensure the header is ignored and unauthenticated requests are rejected.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/pages/api/user/assessment.ts | Removes header-based user impersonation and wraps the route in requireAuth to derive identity from the session only. |
| tests/pages/api/user/assessment.test.ts | Adds regression tests proving the header no longer affects reads/writes and unauthenticated calls are rejected. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // Identity comes from the authenticated session ONLY. The old x-dev-user-id | ||
| // header bypass let any caller read/write any user's assessment in production. | ||
| export default requireAuth(async (req: AuthenticatedRequest, res: NextApiResponse) => { | ||
| const userId = req.user?.id as string; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
/api/user/assessmenthonored anx-dev-user-idheader with no NODE_ENV gate — any caller could read or write any user's assessment data in production by setting a header.Fix
requireAuthand identity comes from the authenticated session only (req.user.id).getSession({ req })client call as a side effect of using the shared wrapper.Verification
__tests__/pages/api/user/assessment.test.ts, 4 passing): header is ignored for reads and writes; unauthenticated requests are 401 even with the header; input validation intact.npm run typecheck— pass.Closes #1169