JWT用户状态验证

68 阅读2分钟

1. 问:在本项目中,JWT 是如何生成和下发给前端的?

答:
在 web-server 端,用户登录成功后会通过 utils/JWT.js 生成 JWT。比如在 controllers/admin/UserController.js 或相关登录接口中,验证用户名和密码无误后,调用 JWT 工具生成 token,并通过接口响应返回给前端。前端(如 web-admin 或 web-company 的 Login.vue)拿到 token 后,通常会存储在 localStorage 或 sessionStorage 中,用于后续请求的身份验证。


2. 问:前端如何在请求时携带 JWT?

答:
在 web-admin 和 web-company 的前端项目中,API 请求通常通过 src/utils/request.ts 进行统一封装。在该文件中,可以通过拦截器(如 axios 的 request 拦截器)自动从 localStorage 读取 JWT,并将其放入请求头的 Authorization 字段(如 Authorization: Bearer <token>)。这样后端就能识别用户身份,实现接口的权限控制。


3. 问:后端如何验证前端传来的 JWT 是否有效?

答:
后端在 web-server/middleware/AuthMiddleware.js 中实现了 JWT 验证中间件。每当前端请求需要鉴权的接口时,该中间件会从请求头读取 Authorization 字段,解析并验证 JWT 的合法性和有效期。如果 token 无效或过期,则返回 401 未授权错误。只有验证通过的请求才会继续执行后续业务逻辑。


4. 问:JWT 如何实现用户的登录状态保持与自动失效?

答:
JWT 本身包含了过期时间(exp 字段),在生成 token 时就已设定。前端只需保存 token,无需手动管理登录状态。每次请求时后端会校验 token 是否过期,过期则返回 401,前端收到后可自动跳转到登录页(如 router/guard.ts 里可做全局路由守卫处理)。这样实现了用户状态的自动失效和安全控制。


5. 问:如何在前后端分离项目中安全地存储和使用 JWT?

答:
在本项目中,前端通常将 JWT 存储在 localStorage 或 sessionStorage 中。为防止 XSS 攻击,前端应避免将 token 注入到页面中或暴露给第三方脚本。后端接口应始终通过 HTTPS 提供服务,防止 token 被窃取。对于高安全需求,可以考虑将 JWT 存储在 httpOnly 的 cookie 中(本项目目前主要用 localStorage)。此外,前端每次请求都应校验 token 是否存在,后端则负责 token 的有效性和权限校验。