gongxiangp2/lib/upload-auth.ts
2026-07-13 17:42:27 +08:00

20 lines
914 B
TypeScript

import { getServerSession } from 'next-auth'
import type { NextRequest } from 'next/server'
import { authOptions } from '@/lib/auth'
import {
DINGTALK_PERFORMANCE_SESSION_HEADER,
verifyDingtalkPerformanceSessionToken,
} from '@/lib/dingtalk-performance-session'
export async function getAuthenticatedUploadUserId(request: NextRequest): Promise<string | null> {
const session = await getServerSession(authOptions)
const sessionUserId = String((session?.user as any)?.id || '').trim()
if (sessionUserId) return sessionUserId
const headerToken = request.headers.get(DINGTALK_PERFORMANCE_SESSION_HEADER)
const authorization = request.headers.get('authorization') || ''
const bearerToken = authorization.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()
const payload = verifyDingtalkPerformanceSessionToken(headerToken || bearerToken || null)
return payload?.userId ? String(payload.userId).trim() : null
}