From b68f9f157cfedf000745c033747f8865ad582e1c Mon Sep 17 00:00:00 2001 From: Jarrod Flesch Date: Mon, 26 Feb 2024 08:36:02 -0500 Subject: [PATCH] chore: improve auth function --- packages/next/src/utilities/auth.ts | 26 +++++------- packages/next/src/utilities/initPage.ts | 56 ++++++++++++++----------- packages/payload/tsconfig.json | 3 +- packages/translations/src/types.ts | 2 +- 4 files changed, 45 insertions(+), 42 deletions(-) diff --git a/packages/next/src/utilities/auth.ts b/packages/next/src/utilities/auth.ts index efd3146c2..a4a6b4485 100644 --- a/packages/next/src/utilities/auth.ts +++ b/packages/next/src/utilities/auth.ts @@ -1,36 +1,30 @@ -import { getPayload } from 'payload' +import type { I18n } from '@payloadcms/translations' import { getAuthenticatedUser, getAccessResults } from 'payload/auth' -import { SanitizedConfig } from 'payload/types' +import { PayloadRequest } from 'payload/types' import { cache } from 'react' export const auth = cache( async ({ headers, - config, + cookies, + i18n, + partialReq, }: { headers: any - config: SanitizedConfig | Promise cookies: Map + i18n: I18n + partialReq: Partial }) => { - const payload = await getPayload({ config }) - const user = await getAuthenticatedUser({ headers, - payload, + payload: partialReq.payload, cookies, }) + partialReq.user = user const permissions = await getAccessResults({ - req: { - user, - payload, - context: {}, - payloadAPI: 'REST', - headers, - i18n: undefined, - t: undefined, - }, + req: partialReq as PayloadRequest, }) return { diff --git a/packages/next/src/utilities/initPage.ts b/packages/next/src/utilities/initPage.ts index 206c724c6..8aaf195b5 100644 --- a/packages/next/src/utilities/initPage.ts +++ b/packages/next/src/utilities/initPage.ts @@ -5,6 +5,7 @@ import { auth } from './auth' import { getPayload } from 'payload' import type { + PayloadRequest, SanitizedCollectionConfig, SanitizedConfig, SanitizedGlobalConfig, @@ -45,19 +46,43 @@ export const initPage = async ({ }> => { const headers = getHeaders() const cookies = parseCookies(headers) + const language = getRequestLanguage({ cookies, headers }) + const config = await configPromise + const payload = await getPayload({ config }) + + const { localization, routes, collections, globals } = config + + const i18n = await initI18n({ + config: config.i18n, + language, + translations, + context: 'client', + }) + + const defaultLocale = + localization && localization.defaultLocale ? localization.defaultLocale : 'en' + const localeCode = localeParam || defaultLocale + const locale = localization && findLocaleFromCode(localization, localeCode) + + const partialReq: Partial = { + user: null, + payload, + payloadAPI: 'REST', + headers, + i18n, + t: i18n.t, + locale: locale ? locale?.code : undefined, + fallbackLocale: locale ? locale?.fallbackLocale : undefined, + context: {}, + } const { permissions, user } = await auth({ headers, - config: configPromise, cookies, + i18n, + partialReq, }) - const language = getRequestLanguage({ cookies, headers }) - - const config = await configPromise - - const { localization, routes, collections, globals } = config - if (redirectUnauthenticatedUser && !user && route !== '/login') { const stringifiedSearchParams = Object.keys(searchParams ?? {}).length ? `?${qs.stringify(searchParams)}` @@ -66,16 +91,6 @@ export const initPage = async ({ redirect(`${routes.admin}/login?redirect=${routes.admin + route + stringifiedSearchParams}`) } - const payload = await getPayload({ - config, - }) - - const i18n = await initI18n({ - config: config.i18n, - language, - translations, - context: 'all', - }) let collectionConfig: SanitizedCollectionConfig let globalConfig: SanitizedGlobalConfig @@ -87,13 +102,6 @@ export const initPage = async ({ globalConfig = globals.find((global) => global.slug === globalSlug) } - const defaultLocale = - localization && localization.defaultLocale ? localization.defaultLocale : 'en' - - const localeCode = localeParam || defaultLocale - - const locale = localization && findLocaleFromCode(localization, localeCode) - return { payload, permissions, diff --git a/packages/payload/tsconfig.json b/packages/payload/tsconfig.json index 44b325b0a..a5c97cd40 100644 --- a/packages/payload/tsconfig.json +++ b/packages/payload/tsconfig.json @@ -32,5 +32,6 @@ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.json"], "ts-node": { "swc": true - } + }, + "references": [{ "path": "../translations" }] } diff --git a/packages/translations/src/types.ts b/packages/translations/src/types.ts index a780139ab..617730a91 100644 --- a/packages/translations/src/types.ts +++ b/packages/translations/src/types.ts @@ -47,5 +47,5 @@ export type InitI18n = (args: { config: I18nOptions language?: string translations: Translations - context: 'all' | 'api' | 'client' + context: 'api' | 'client' }) => Promise