👋

【Better Auth】NextJs & tRPC 【#7 Better Auth & tRPC Server Side】

に公開

【#7 Better Auth & tRPC Server Side】

YouTube: https://youtu.be/N0_riq1gCjs
https://youtu.be/N0_riq1gCjs

今回はBetter Authの認証機能をtRPCのサーバーサイドの
ルートで使用できるようにします。

https://www.better-auth.com/docs/basic-usage#server-side

src/trpc/init.ts
import { cache } from 'react'
import { headers } from 'next/headers'
import { initTRPC, TRPCError } from '@trpc/server'
import { auth } from '@/lib/auth'

export const createTRPCContext = cache(async () => {
  /**
   * @see: https://trpc.io/docs/server/context
   */
  return { userId: 'user_123' }
})
// Avoid exporting the entire t-object
// since it's not very descriptive.
// For instance, the use of a t variable
// is common in i18n libraries.
const t = initTRPC.create({
  /**
   * @see https://trpc.io/docs/server/data-transformers
   */
  // transformer: superjson,
})
// Base router and procedure helpers
export const createTRPCRouter = t.router
export const createCallerFactory = t.createCallerFactory
export const baseProcedure = t.procedure
export const protectedProcedure = baseProcedure.use(async ({ ctx, next }) => {
  const session = await auth.api.getSession({
    headers: await headers(),
  })

  if (!session) {
    throw new TRPCError({ code: 'UNAUTHORIZED', message: 'Unauthorized' })
  }

  return next({
    ctx: { ...ctx, auth: session },
  })
})

Discussion