42 lines
878 B
TypeScript
42 lines
878 B
TypeScript
import { cookies } from 'next/headers'
|
|
import { redirect } from 'next/navigation'
|
|
|
|
import type { User } from '../payload-types'
|
|
|
|
export const getMeUser = async (args?: {
|
|
nullUserRedirect?: string
|
|
validUserRedirect?: string
|
|
}): Promise<{
|
|
user: User
|
|
token: string | undefined
|
|
}> => {
|
|
const { nullUserRedirect, validUserRedirect } = args || {}
|
|
const cookieStore = cookies()
|
|
const token = cookieStore.get('payload-token')?.value
|
|
|
|
const meUserReq = await fetch(`${process.env.NEXT_PUBLIC_CMS_URL}/api/users/me`, {
|
|
headers: {
|
|
Authorization: `JWT ${token}`,
|
|
},
|
|
})
|
|
|
|
const {
|
|
user,
|
|
}: {
|
|
user: User
|
|
} = await meUserReq.json()
|
|
|
|
if (validUserRedirect && meUserReq.ok && user) {
|
|
redirect(validUserRedirect)
|
|
}
|
|
|
|
if (nullUserRedirect && (!meUserReq.ok || !user)) {
|
|
redirect(nullUserRedirect)
|
|
}
|
|
|
|
return {
|
|
user,
|
|
token,
|
|
}
|
|
}
|