feat: 添加认证 API 路由和中间件

This commit is contained in:
2026-03-30 21:27:10 +08:00
parent 8b754f9fe6
commit df485b54c9
4 changed files with 36 additions and 15 deletions
+11
View File
@@ -0,0 +1,11 @@
import { createFileRoute } from '@tanstack/react-router'
import { auth } from '@/server/auth'
export const Route = createFileRoute('/api/auth/$' as never)({
server: {
handlers: {
GET: ({ request }) => auth.handler(request),
POST: ({ request }) => auth.handler(request),
},
},
})
+5 -15
View File
@@ -1,25 +1,15 @@
import type { auth } from '@/server/auth'
import type { DB } from '@/server/db' import type { DB } from '@/server/db'
/**
* 基础 Context - 所有请求都包含的上下文
*/
export interface BaseContext { export interface BaseContext {
headers: Headers headers: Headers
} }
/**
* 数据库 Context - 通过 db middleware 扩展
*/
export interface DBContext extends BaseContext { export interface DBContext extends BaseContext {
db: DB db: DB
} }
/** export interface AuthContext extends DBContext {
* 认证 Context - 通过 auth middleware 扩展(未来使用) user: typeof auth.$Infer.Session.user
* session: typeof auth.$Infer.Session.session
* @example }
* export interface AuthContext extends DBContext {
* userId: string
* user: User
* }
*/
@@ -0,0 +1,19 @@
import { ORPCError } from '@orpc/server'
import { os } from '@/server/api/server'
import { auth } from '@/server/auth'
export const authMiddleware = os.middleware(async ({ context, next }) => {
const sessionData = await auth.api.getSession({ headers: context.headers })
if (!sessionData?.session || !sessionData?.user) {
throw new ORPCError('UNAUTHORIZED')
}
return next({
context: {
...context,
session: sessionData.session,
user: sessionData.user,
},
})
})
@@ -1 +1,2 @@
export * from './auth.middleware'
export * from './db.middleware' export * from './db.middleware'