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

如何在Postman与Node.js中跨文件获取当前用户信息

在Postman和Node.js中调用当前用户信息的方案

嘿,我来帮你搞定这个问题——你的登录代码已经生成了包含用户邮箱和ID的JWT,接下来分Postman和Node.js后端两种场景,一步步实现调用当前用户信息:

一、Postman 端操作步骤

1. 先拿到登录 Token

先调用你的登录接口(比如 POST /api/login),请求体里填好邮箱和密码,发送后就能拿到包含 token 的响应。

2. 把 Token 用到后续请求里

  • 手动快速方式:在需要验证用户的请求中,打开「Headers」标签,添加 Authorization 键,值填 Bearer 你的token内容(注意Bearer和token之间有个空格)。
  • 高效复用方式(环境变量):
    不想每次复制粘贴?在登录请求的「Tests」标签里加这段脚本,把token存到Postman环境变量里:
    if (pm.response.code === 200) {
        const token = pm.response.json().token;
        pm.environment.set("authToken", token);
    }
    
    之后其他请求的 Authorization 头直接用 {{authToken}} 就行,Postman会自动替换成存好的token。

二、Node.js 后端(其他文件/接口)调用用户信息

核心思路是:写一个中间件验证JWT,把解析后的用户信息挂载到请求对象上,这样其他接口或文件就能直接用。

1. 写个JWT验证中间件

新建 auth.middleware.js 文件,代码如下:

const jwt = require('jsonwebtoken');

module.exports = (req, res, next) => {
    try {
        // 从请求头里提取token(Bearer 空格 字符串)
        const token = req.headers.authorization.split(' ')[1];
        // 用你登录时的JWT_KEY验证并解析token
        const decodedUser = jwt.verify(token, process.env.JWT_KEY);
        // 把用户信息挂到req上,后续路由直接拿
        req.currentUser = decodedUser;
        next(); // 放行到下一个路由/中间件
    } catch (error) {
        return res.status(401).json({ message: 'Auth failed' });
    }
};

2. 在其他路由里用这个中间件

比如你有个获取用户个人信息的接口 GET /api/user/profile,可以这么写:

const express = require('express');
const router = express.Router();
const authMiddleware = require('./auth.middleware'); // 引入中间件
const User = require('./user.model'); // 你的用户模型

router.get('/profile', authMiddleware, (req, res, next) => {
    // req.currentUser就是登录时生成的用户信息(email和userId)
    console.log('当前登录用户:', req.currentUser);
    
    // 如果需要从数据库取完整用户数据,用userId查询就行
    User.findById(req.currentUser.userId)
        .exec()
        .then(user => {
            res.status(200).json({
                message: '用户信息获取成功',
                user: {
                    email: user.email,
                    id: user._id,
                    // 按需返回其他字段
                }
            });
        })
        .catch(err => {
            res.status(500).json({ error: err });
        });
});

module.exports = router;

3. 在非路由文件(比如服务层)调用用户信息

如果是在业务逻辑文件里需要用户信息,最直接的方式是把 req.currentUser 作为参数传过去:
比如新建 user.service.js:

const User = require('./user.model');

exports.getUserProfile = async (userId) => {
    try {
        const user = await User.findById(userId).exec();
        return {
            email: user.email,
            id: user._id
        };
    } catch (err) {
        throw new Error('获取用户信息失败');
    }
};

然后在路由里调用:

router.get('/profile', authMiddleware, async (req, res, next) => {
    try {
        const userProfile = await userService.getUserProfile(req.currentUser.userId);
        res.status(200).json({ message: '成功', user: userProfile });
    } catch (err) {
        res.status(500).json({ error: err.message });
    }
});

小提醒

  • 确保 process.env.JWT_KEY 在所有需要验证token的文件里都能正确读取(可以用dotenv包加载.env文件)。
  • 如果请求没带正确的token,中间件会直接返回401,拦截未授权访问。

内容的提问来源于stack exchange,提问作者H.adugna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:02:34