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

如何在JWT/Express/Node技术栈中获取当前用户token并实现中间件拦截

实现步骤

1. 客户端处理登录返回的token

登录接口成功返回token后,前端需要先存储token,常用存储方式有两种:

  • 存在localStorage/sessionStorage中,后续发起请求时,在请求头的Authorization字段携带,格式为Bearer 你的token字符串
  • 存在HttpOnly Cookie中,浏览器发起请求时会自动携带,无需手动处理,还能避免XSS攻击窃取token

2. 编写JWT校验中间件

以Express框架为例,中间件代码示例如下:

const jwt = require('jsonwebtoken')
const config = require('./你的配置文件路径')

const authMiddleware = (req, res, next) => {
  // 方式1:从请求头Authorization中取token
  const authHeader = req.headers.authorization
  const token = authHeader && authHeader.split(' ')[1] // 去掉Bearer前缀
  
  // 方式2:如果是存在Cookie里,就从cookie取
  // const token = req.cookies.token

  if (!token) {
    return res.status(401).json({ success: false, message: '缺少访问凭证,无权访问' })
  }

  try {
    // 校验token合法性,解析payload
    const decoded = jwt.verify(token, config.secret)
    // 把解析出来的用户信息挂载到req对象上,后续控制器就能直接拿
    req.user = decoded
    // 如果需要用到原始token,也可以直接挂载
    req.token = token
    next() // 校验通过,放行到对应的控制器
  } catch (err) {
    return res.status(403).json({ success: false, message: 'token无效或已过期' })
  }
}

module.exports = authMiddleware

3. 路由挂载中间件

在需要鉴权的路由上引入并挂载中间件即可:

const authMiddleware = require('./authMiddleware')
const userController = require('./你的控制器文件路径')

// 只有经过中间件校验通过的请求,才会进入后面的控制器
app.get('/api/user/info', authMiddleware, userController.getUserInfo)

4. 控制器中获取token/用户信息

在控制器里直接从req对象上取之前挂载的内容即可:

exports.getUserInfo = (req, res) => {
  // 取token里存的userId
  const userId = req.user.userId
  // 取原始token
  const rawToken = req.token
  // 后续业务逻辑
  res.json({ success: true, data: { userId } })
}

注意事项

  • JWT的payload是Base64编码的,任何人都可以解码,不要在payload里存放密码等敏感信息
  • 生成JWT用的secret密钥要足够复杂,生产环境建议存在环境变量中,不要硬编码在代码里
  • 如果是跨域请求,需要在后端配置允许携带凭证,同时配置允许的请求头包含Authorization

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:36:04