路由守卫
通过配置 guardedPaths 和 guestPaths,框架自动注入全局路由守卫中间件,实现登录拦截和已登录重定向。
配置
// nuxt.config.ts
swiftConfig: {
auth: {
// 需要登录才能访问的路径(路径前缀匹配)
guardedPaths: ['/mine', '/dashboard', '/settings'],
// 已登录时不可访问的路径(如登录页、注册页)
// 已登录用户访问这些路径会被重定向到首页
guestPaths: ['/login', '/register'],
}
}
守卫行为
| 路径类型 | 未登录访问 | 已登录访问 |
|---|---|---|
guardedPaths 中的路径 | 重定向到 /login?redirect=原路径 | 正常访问 |
guestPaths 中的路径 | 正常访问 | 重定向到 /(首页) |
| 其他路径 | 正常访问 | 正常访问 |
路径匹配规则
使用前缀匹配:guardedPaths: ['/mine'] 会匹配 /mine、/mine/favorites、/mine/settings 等所有以 /mine 开头的路径。
登录成功后的重定向
守卫将原始路径存入查询参数 ?redirect=,登录成功后,useLoginBy() 会自动读取并跳转到登录前的页面。
自定义守卫逻辑
如需更复杂的守卫逻辑(如基于角色的权限控制),可在 app/middleware/ 中创建自定义中间件:
// app/middleware/auth.global.ts
export default defineNuxtRouteMiddleware(async (to) => {
const userStore = useUserStore()
// 自定义:管理员页面需要 admin 角色
if (to.path.startsWith('/admin')) {
const loggedIn = await useLoginCheck()
if (!loggedIn) return navigateTo('/login')
if (!userStore.info?.isAdmin) return navigateTo('/')
}
})
安全行为
framework 内置两条 auth 相关的安全行为,无需额外配置即默认生效:
拒绝 URL 注入的渠道码
systemStore.initCode()(由 framework 插件在初始化时调用)检测到 ?switch=1 路径下从 URL query 注入的渠道码(?code=...)会被拒绝,
防止恶意分享链接劫持业务渠道归因。仅站内合法路径下的渠道码切换会被接受。
logout 先撤销服务端会话,再同步清理本地状态
调用框架登出流程(userStore.logout())时,会先向后端 POST /login/logout 撤销当前会话——失败静默吞掉、不阻断登出(网络故障 / 后端未实现该端点时本地照清,零适配成本)——随后同步清空:
- 渠道码 cookie(
Set-Cookie: code=; Max-Age=0) - IDB 解密缓存(如
useDecryptedAsset缓存的解密 blob URL) - 约定登录凭证 localStorage(防止登出后下个用户登录时拿到上个用户的凭证残留)
避免登出残留信息泄漏到下个会话或下个用户,同时保证原 token 在服务端立即失效——「用户已登出」重新成为一道真实防线(对齐 OWASP 会话管理要求)。
延伸阅读
- 自动登录 + Token 重登链路 — 完整时序图 + 三种渲染模式行为对照 + 业务侧禁忌
- 渲染模式快速指南 — 守卫路径按页面类型选 ISR / SSR / CSR 的策略