-
Notifications
You must be signed in to change notification settings - Fork 253
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(nextjs): Return 401 Response on protected API routes #1276
feat(nextjs): Return 401 Response on protected API routes #1276
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ Great news! Jit hasn't found any security issues in your PR. Good Job! 🏆
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
❓ should we also add the isApiRoute
to the auth
object ?
06ea88b
to
5909c28
Compare
🦋 Changeset detectedLatest commit: 56e8fba The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
!snapshot |
Hey @nikosdouvlis - the snapshot version command generated the following package versions:
Tip: use the snippet copy button below to quickly install the required packages. # @clerk/backend
npm i @clerk/backend@0.21.1-snap.5909c28 # @clerk/chrome-extension
npm i @clerk/chrome-extension@0.3.8-snap.5909c28 # @clerk/clerk-js
npm i @clerk/clerk-js@4.45.1-snap.5909c28 # eslint-config-custom
npm i eslint-config-custom@0.3.0 # @clerk/clerk-expo
npm i @clerk/clerk-expo@0.17.8-snap.5909c28 # @clerk/fastify
npm i @clerk/fastify@0.4.6-snap.5909c28 # gatsby-plugin-clerk
npm i gatsby-plugin-clerk@4.3.7-snap.5909c28 # @clerk/localizations
npm i @clerk/localizations@1.17.0 # @clerk/nextjs
npm i @clerk/nextjs@4.19.2-snap.5909c28 # @clerk/clerk-react
npm i @clerk/clerk-react@4.18.0 # @clerk/remix
npm i @clerk/remix@2.6.6-snap.5909c28 # @clerk/clerk-sdk-node
npm i @clerk/clerk-sdk-node@4.10.4-snap.5909c28 # @clerk/shared
npm i @clerk/shared@0.17.2 # @clerk/themes
npm i @clerk/themes@1.7.5 # @clerk/types
npm i @clerk/types@3.41.0 |
This commit introduces a new apiRoutes param on authMiddleware. If apiRoutes is omitted, then a default heuristic is the following: If the route path is ['/api/(.*)', '/trpc/(.*)'] or Request has Content-Type: application/json or Request method is not-GET,OPTIONS,HEAD , then this is considered an API route.
5909c28
to
fd6906e
Compare
0641a7c
to
4fa3945
Compare
@@ -40,7 +40,7 @@ export const authenticateRequest = async (req: NextRequest, opts: WithAuthOption | |||
}; | |||
|
|||
export const handleUnknownState = (requestState: RequestState) => { | |||
const response = new NextResponse(null, { status: 401, headers: { 'Content-Type': 'text/html' } }); | |||
const response = apiEndpointUnauthorizedNextResponse(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nikosdouvlis The Unknown state is only returned when a request uses the Authorization
header. So, if we append the Authorization
header in a fetch request, we can get the Unknown state, which is not a case where we would want the Interstitial. (cc @dimkl)
I removed the payload.
This PR has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
Type of change
Packages affected
@clerk/clerk-js
@clerk/clerk-react
@clerk/nextjs
@clerk/remix
@clerk/types
@clerk/themes
@clerk/localizations
@clerk/clerk-expo
@clerk/backend
@clerk/clerk-sdk-node
@clerk/shared
@clerk/fastify
@clerk/chrome-extension
gatsby-plugin-clerk
build/tooling/chore
Description
npm test
runs as expected.npm run build
runs as expected.This commit introduces a new
apiRoutes
param onauthMiddleware
.If
apiRoutes
is omitted, then the following heuristic is used:['/api/(.*)', '/trpc/(.*)']
Content-Type: application/json
GET,OPTIONS,HEAD
,then this is considered an API route.
After this commit, a 401 JSON Response is returned on the following 3 cases:
authenticateRequest
function returns theUnknown
state.authenticateRequest
function returns theInterstitial
state and the route is an API route.afterAuth
. If it is overwritten, then the user needs to handle this case themselves)