Skip to content

Commit

Permalink
feat(next): supports custom login redirects in initPage
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobsfletch committed May 2, 2024
1 parent 0afe192 commit 52e095c
Showing 1 changed file with 26 additions and 6 deletions.
32 changes: 26 additions & 6 deletions packages/next/src/utilities/initPage/handleAuthRedirect.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { redirect } from 'next/navigation.js'
import QueryString from 'qs'

import { isAdminAuthRoute } from './shared.js'
import { isAdminAuthRoute, isAdminRoute } from './shared.js'

export const handleAuthRedirect = ({
adminRoute,
redirectUnauthenticatedUser,
route,
searchParams,
}: {
Expand All @@ -14,12 +15,31 @@ export const handleAuthRedirect = ({
searchParams: { [key: string]: string | string[] }
}) => {
if (!isAdminAuthRoute(route, adminRoute)) {
if (searchParams && 'redirect' in searchParams) delete searchParams.redirect
const redirectRoute = encodeURIComponent(
route + Object.keys(searchParams ?? {}).length
? `${QueryString.stringify(searchParams, { addQueryPrefix: true })}`
: undefined,
)

const stringifiedSearchParams = Object.keys(searchParams ?? {}).length
? `?${QueryString.stringify(searchParams)}`
: ''
const adminLoginRoute = `${adminRoute}/login`

redirect(`${adminRoute}/login?redirect=${route + stringifiedSearchParams}`)
const customLoginRoute =
typeof redirectUnauthenticatedUser === 'string' ? redirectUnauthenticatedUser : undefined

const loginRoute = isAdminRoute(route, adminRoute)
? adminLoginRoute
: customLoginRoute || '/login'

const parsedLoginRouteSearchParams = QueryString.parse(loginRoute.split('?')[1] ?? '')

const searchParamsWithRedirect = `${QueryString.stringify(
{
...parsedLoginRouteSearchParams,
redirect: redirectRoute,
},
{ addQueryPrefix: true },
)}`

redirect(`${loginRoute.split('?')[0]}${searchParamsWithRedirect}`)
}
}

0 comments on commit 52e095c

Please sign in to comment.