route.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { NextRequest, NextResponse } from 'next/server';
  2. import { getCurrentUser } from '@/lib/auth-middleware';
  3. import { auth } from '@/lib/auth';
  4. import { db } from '@/lib/db';
  5. import { users } from '@/lib/schema';
  6. import { eq } from 'drizzle-orm';
  7. export async function GET(request: NextRequest) {
  8. try {
  9. // 首先尝试NextAuth session
  10. const session = await auth();
  11. if (session?.user?.email) {
  12. // 从数据库获取完整的用户信息
  13. const user = await db.query.users.findFirst({
  14. where: eq(users.email, session.user.email),
  15. });
  16. if (user) {
  17. return NextResponse.json({
  18. user: {
  19. id: user.id,
  20. email: user.email,
  21. username: user.username,
  22. isEmailVerified: user.isEmailVerified,
  23. credits: user.credits || 0,
  24. subscriptionCredits: user.subscriptionCredits || 0,
  25. subscriptionStatus: user.subscriptionStatus,
  26. subscriptionPlan: user.subscriptionPlan,
  27. subscriptionStartDate: user.subscriptionStartDate?.toISOString() || null,
  28. subscriptionEndDate: user.subscriptionEndDate?.toISOString() || null,
  29. },
  30. });
  31. }
  32. }
  33. // 如果NextAuth session不存在,尝试我们自己的JWT token
  34. const user = await getCurrentUser(request);
  35. if (!user) {
  36. return NextResponse.json(
  37. { error: '未认证用户' },
  38. { status: 401 }
  39. );
  40. }
  41. return NextResponse.json({
  42. user: {
  43. id: user.id,
  44. email: user.email,
  45. username: user.username,
  46. isEmailVerified: user.isEmailVerified,
  47. credits: user.credits || 0,
  48. subscriptionCredits: user.subscriptionCredits || 0,
  49. subscriptionStatus: user.subscriptionStatus,
  50. subscriptionPlan: user.subscriptionPlan,
  51. subscriptionStartDate: user.subscriptionStartDate?.toISOString() || null,
  52. subscriptionEndDate: user.subscriptionEndDate?.toISOString() || null,
  53. },
  54. });
  55. } catch (error) {
  56. console.error('获取用户信息错误:', error);
  57. return NextResponse.json(
  58. { error: '服务器内部错误' },
  59. { status: 500 }
  60. );
  61. }
  62. }