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

如何在Nuxt 3的API与中间件中服务端使用Cookie?

Nuxt 3 服务端Cookie使用及认证方案

一、API中正确设置Cookie

要在服务端API中设置Cookie,必须使用setCookie函数并传入event对象,同时配置必要的Cookie属性确保跨路径可访问:

// ~/server/api/auth.post.ts
export default defineEventHandler(async (event) => {
  // 生成认证令牌(示例逻辑)
  const authToken = 'your-generated-jwt-token';

  // 设置Cookie,核心是传入event并配置关键属性
  setCookie(event, 'auth_token', authToken, {
    httpOnly: true, // 禁止前端JS读取,提升安全性
    secure: process.env.NODE_ENV === 'production', // 生产环境强制HTTPS传输
    sameSite: 'strict',
    path: '/', // 确保全站所有路径都能访问该Cookie
    maxAge: 60 * 60 * 24 * 7 // 有效期设为7天
  });

  return { success: true, message: '登录成功' };
});

你之前设置失败大概率是两个原因:一是未将event传入setCookie函数,二是没配置path: '/'导致Cookie仅在/api路径下生效。

二、中间件中读取Cookie的正确方式

Nuxt 3的路由中间件读取Cookie分两种场景,若使用httpOnly类型的Cookie,必须确保中间件在服务端运行:

方式1:创建服务端专属中间件

将中间件文件名改为logged.server.ts,这样它只会在服务端执行,天然能读取到请求头中的Cookie:

// ~/middleware/logged.server.ts
export default defineNuxtRouteMiddleware((to, from) => {
  // 服务端运行时,useCookie会自动从请求头获取Cookie
  const authToken = useCookie('auth_token');

  // 无有效令牌则重定向到登录页
  if (!authToken.value) {
    return navigateTo('/login');
  }

  // 可选:验证令牌有效性(可调用服务端API做校验)
  // const isValid = await $fetch('/api/verify-token', {
  //   method: 'POST',
  //   body: { token: authToken.value }
  // });
  // if (!isValid) return navigateTo('/login');
});

方式2:在普通中间件中强制服务端逻辑

若不想修改文件名,可通过useRequestHeaders手动解析Cookie(仅服务端生效):

// ~/middleware/logged.ts
import { parseCookies } from 'h3'

export default defineNuxtRouteMiddleware((to, from) => {
  // 仅在服务端执行Cookie读取逻辑
  if (process.server) {
    const headers = useRequestHeaders(['cookie']);
    const cookies = parseCookies(headers);
    const authToken = cookies.auth_token;

    if (!authToken) {
      return navigateTo('/login');
    }
  }
});

三、其他简易认证方案建议

  • 官方Nuxt Auth模块:如果不想手动实现完整流程,@nuxt/auth模块提供了开箱即用的认证能力,支持Cookie、JWT等多种存储方式,适合快速搭建系统,但需要学习模块配置规则。
  • 前端状态存储(不推荐):若对安全性要求不高,也可将令牌存在useState中,但存在XSS攻击风险,远不如httpOnly Cookie安全。

内容的提问来源于stack exchange,提问作者CMTV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:37:36