了解了Nodejs中微服务的概念,我设置了两个微服务authusers,它们都是独立的,并且运行在不同的端口上.

身份验证服务处理用户创建,并使用用户名和密码登录用户.这是意料之中的事.我已经使用jwt生成了令牌.我可以轻松创建用户、创建会话令牌并验证其有效性.

我的第二个服务是users,我打算用它向用户表示问候并获取用户的详细信息.我需要使用身份验证服务来了解用户何时登录此设置.

然而,在我当前的工作中,当我试图使用有效的用户id和在标题中传递的有效令牌转到端点/users/:id/sayhello时,我会出现以下错误:

TypeError: Cannot read properties of undefined (reading 'id') at /path/auth/verifyToken.js:23:21 .

然后是这个;来自jwt:

{
    "name": "JsonWebTokenError",
    "message": "secret or public key must be provided"
}

现在让我们看看我的设置.

这是我在auth服务中的verifyToken.js个文件:

const verifyToken = (req, res, next)=>{
    const authHeader = req.headers.token
    // split the header, and get the token "Bearer token"
    const token = authHeader.split(" ")[1];
    if (authHeader) {
        jwt.verify(token, process.env.JWT_SEC, (err, user)=>{
            if (err) res.status(403).json(err);
            req.user = user
            next();
        })
    } else {
        return res.status(401).json("You are not authenticated")
    }
}

const verifyTokenAndAuthorization = (req, res, next) =>{
    verifyToken(req, res, ()=>{
        if(req.user.id === req.params.id){ // error traced back to this line
        next();
        }else{
            res.status(403).json("Permission denied!");
        }
    })
}

在我的users服务中,下面是使用auth服务来知道用户何时登录然后打招呼的代码.

app.get("/users/:id/sayhello", verifyTokenAndAuthorization, async (req, res) => {
  try {
    const user = await User.findById(req.params.id);
    console.log(req.params.id) // undefined
    res.status(200).json(`Hello ${user.username}`);
  } catch (error) {
    res.status(500).json(error);
  }
});

我没有从类似的帖子中找到任何线索,比如ABC

我不确定什么是不对的.我将感谢可能的建议和解决方案.

推荐答案

console.log(process.env.JWT_SEC)

身份验证过程失败,因此用户属性在req对象上未设置,因此req.usernull.

Node.js相关问答推荐

(0,core_1.default)不是使用@middy/core的lambda处理程序上的函数

React原生Nodejs兼容性问题

仅在一次查询中 MongoDB 上最近的一对位置

为什么 mongoose 没有常规数组方法

无法使用 Express 设置会话 cookie 的过期日期

DynamoDB 分页数据检索

Postgressql的BIGSERIAL自增序列,即使由于唯一约束错误没有创建行,也会自动增加

如何通过node下载zip并直接解压zip?

将环境变量从 GitHub 操作传递到 json

(Mongoose) 删除 TTL 字段失败

Express.js - 监听请求中止

用户与mongoose 的完美搭配

您如何写入 aws lambda 实例的文件系统?

使 pm2 登录到控制台

将 myproject/.npmrc 与注册表一起使用

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器

代理(如提琴手)可以与 Node.js 的 ClientRequest 一起使用吗

nodejs - 如何读取和输出 jpg 图像?

安装Node.js 安装n 安装Node.js?

fs.createWriteStream 不会立即创建文件?