You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js服务端API请求无法获取Cookie,返回Unauthenticated错误

服务端组件调用内部API返回“Unauthenticated”的解决方案

你遇到的问题核心是Next.js服务端组件(Server Component)的执行上下文和客户端不同——服务端组件在服务器端运行,不会自动继承浏览器请求的Authorization头;而客户端组件在浏览器中执行,请求会自动带上当前页面的请求头,所以能正常获取用户信息。下面是具体解决方案:

1. 手动传递请求头到内部API调用

在服务端组件中,通过next/headers提供的headers()函数获取当前页面请求的Authorization头,然后在调用内部API时手动携带这个头:

import { headers } from 'next/headers';

async function UserProfile() {
  // 获取当前请求的Authorization头
  const authHeader = headers().get('authorization');
  
  // 调用内部API时携带头信息
  const res = await fetch('http://localhost:3000/api/auth/me', {
    headers: {
      ...(authHeader && { Authorization: authHeader }),
    },
    // 若需实时数据,添加cache: 'no-store'避免缓存
    cache: 'no-store',
  });

  if (!res.ok) {
    throw new Error('获取用户信息失败');
  }

  const user = await res.json();
  return <div>你好,{user.name}</div>;
}

export default UserProfile;

2. 直接调用后端逻辑,跳过内部API

既然服务端组件本身就在服务器端运行,没必要通过网络请求调用内部API,直接复用后端的用户认证逻辑更高效,也能避免请求头传递问题:

import { headers } from 'next/headers';
// 假设你有封装好的认证工具函数
import { getUserFromToken } from '@/lib/auth';

async function UserProfile() {
  const authHeader = headers().get('authorization');
  
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    throw new Error('未授权');
  }

  // 提取令牌并直接调用后端逻辑
  const token = authHeader.split(' ')[1];
  const user = await getUserFromToken(token);

  return <div>你好,{user.name}</div>;
}

export default UserProfile;

3. 检查API路由的认证逻辑

确认api/auth/me/route.js中提取令牌的逻辑是否正确,确保能正确解析服务端组件传递的请求头:

// app/api/auth/me/route.js
export async function GET(request) {
  const authHeader = request.headers.get('authorization');
  
  // 校验Authorization头格式
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return new Response(JSON.stringify({ message: 'Unauthenticated.' }), {
      status: 401,
    });
  }

  const token = authHeader.split(' ')[1];
  // 替换为你的令牌验证和用户信息获取逻辑
  const user = await verifyTokenAndFetchUser(token);

  return Response.json(user);
}

内容的提问来源于stack exchange,提问作者Selçuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:14:54