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

nuxt-auth是如何通过cookie向后端校验用户登录状态的?

Nuxt Auth 登录校验逻辑说明 & 受限区域中间件实现方案

一、nuxt-auth 后端校验逻辑的实现位置

你看不到/api/user请求的核心原因是你用了SSR模式,校验逻辑分两端执行:

  • 整页刷新场景:校验逻辑在Nuxt服务端的全局auth中间件内执行,/api/user请求是Nuxt服务端直接发往Laravel后端的,走服务端到服务端的通信,不会经过客户端浏览器,所以你在开发者工具的网络标签里看不到这条请求。
  • 客户端路由切换场景:校验逻辑在客户端路由守卫内触发,此时/api/user请求才会从浏览器发出,你才能在网络标签里看到对应记录。
    核心校验逻辑源码位置(以@nuxtjs/auth-next版本为例):在/runtime/core/auth.ts的fetchUser方法内,该方法会被服务端中间件、客户端路由守卫两个入口调用,存储模块只负责存登录态凭证和用户信息,不处理校验逻辑。

二、清空Redis/删除/api/user触发自动登出的原因

nuxt-auth默认的会话有效性校验逻辑就是请求/api/user接口,只要出现以下任意一种情况,就会自动判定登录失效,触发前端登出逻辑:

  • 接口返回非2xx状态码
  • 接口返回的用户数据为空
    你清空Redis后会话失效,/api/user会返回401;删除路由后接口返回404,都会命中失效判定规则。

三、复用现有机制实现验证码校验中间件

你不需要修改nuxt-auth源码,直接复用它自动携带Sanctum会话凭证的能力即可,不用你自己处理Cookie、请求头的传递逻辑,实现步骤如下:

  1. 后端新增校验接口,比如/api/user/verify-captcha-status:校验当前会话对应的用户是否已经完成验证码验证,验证通过返回200,未通过返回403。
  2. 新建Nuxt中间件,示例代码如下:

Nuxt3 写法

// middleware/captcha-required.ts
export default defineNuxtRouteMiddleware(async (to) => {
  // 只拦截受限区域路由
  if (!to.path.startsWith('/restricted')) return
  // 复用nuxt-auth的登录态判断,未登录直接跳登录页
  const { loggedIn } = useAuth()
  if (!loggedIn.value) return navigateTo('/login')
  
  // 调用验证码校验接口,nuxt-auth会自动带上当前会话的所有凭证
  const { status } = await useFetch('/api/user/verify-captcha-status')
  // 未通过校验跳转到验证码输入页
  if (status.value === 'error') return navigateTo('/captcha-input')
})

Nuxt2 写法

// middleware/captcha-required.js
export default async function ({ app, route, redirect }) {
  if (!route.path.startsWith('/restricted')) return
  // 复用nuxt-auth登录态判断
  if (!app.$auth.loggedIn) return redirect('/login')
  
  try {
    await app.$axios.$get('/api/user/verify-captcha-status')
  } catch (e) {
    if (e.response?.status === 403) {
      return redirect('/captcha-input')
    }
  }
}

该中间件和nuxt-auth的校验逻辑完全一致,SSR场景下会先在服务端执行,自动携带客户端传递的会话Cookie请求后端,客户端导航场景下会从浏览器自动带上凭证发请求,不需要你额外做适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:06