跳至正文
来两杯美式
返回

T3 Stack 会话认证指南

By 来两杯美式
发布于更新于

概述

本文档介绍 T3 Stack 项目中的会话认证实现方案,基于 NextAuth.js v5 与 tRPC 的集成。

核心组件

┌─────────────────────────────────────────────────────┐
│                    NextAuth.js                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │ OAuth    │  │ Credentials│  │ Session         │  │
│  │ Providers│  │ Provider  │  │ Management      │  │
│  └──────────┘  └──────────┘  └──────────────────┘  │
└─────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│                    tRPC                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │ Context  │  │ Procedure│  │ Middleware       │  │
│  │ (user)  │  │ (protected)│ │ (auth check)   │  │
│  └──────────┘  └──────────┘  └──────────────────┘  │
└─────────────────────────────────────────────────────┘

会话策略配置

// auth.ts
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [
    // OAuth providers (GitHub, Google, etc.)
  ],
  session: {
    strategy: "jwt",
    maxAge: 30 * 24 * 60 * 60, // 30 days
  },
  callbacks: {
    async jwt({ token, user }) {
      if (user) {
        token.id = user.id;
      }
      return token;
    },
    async session({ session, token }) {
      if (session.user) {
        session.user.id = token.id as string;
      }
      return session;
    },
  },
});

tRPC 集成

// server/api/trpc.ts
export const createTRPCContext = async (opts: { headers: Headers }) => {
  const session = await auth();

  return {
    session,
    db: prisma,
  };
};

export const protectedProcedure = publicProcedure.use(({ ctx, next }) => {
  if (!ctx.session?.user) {
    throw new TRPCError({ code: "UNAUTHORIZED" });
  }
  return next({
    ctx: {
      ...ctx,
      session: ctx.session,
    },
  });
});

常见问题

1. Session 未定义

检查 auth() 是否在 API 路由或 Server Component 中调用。

2. JWT 过期处理

配置 pages: { signIn: '/auth/signin' } 自动重定向。

更新记录


分享这篇文章:
通过邮件分享这篇文章✓ 链接已复制
查看系列全部文章
  1. 01.T3 Stack 开发规范
  2. 02.Next.js 并行路由完全指南
  3. 03.Web 会话与身份验证完整指南
  4. 04.Auth Guard 与 tRPC 中间件
  5. 05.T3 Stack 会话认证指南
  6. 06.Next.js 子域名、反向代理与分享链路最佳实践
  7. 07.CORS 与 Web 安全实战白皮书
  8. 08.Web 多主题架构最佳实践
  9. 09.Vercel AI SDK 自定义 OpenAI 模型接入
  10. 10.AI 驱动动态看板架构指南
  11. 11.VitePress 动态渲染全栈落地方案

上一篇
Next.js 子域名、反向代理与分享链路最佳实践
下一篇
Auth Guard 与 tRPC 中间件