【问题标题】:Middleware unable to authorize [closed]中间件无法授权[关闭]
【发布时间】:2021-05-14 19:35:01
【问题描述】:

我正在学习有关 MERN 堆栈的 Udemy 课程,但在使用 Web 令牌和授权时遇到了问题。

我创建了一个如下所示的 auth.js 文件:

const jwt = require("jsonwebtoken");

function auth(req, res, next) {
  try {
    const token = req.cookie.token;

    if(!token){
        res.status(401).json({errorMessage: "Unauthorized 1"});
    }

    const validatedUser = jwt.verify(token, process.env.JWT_SECRET);
    req.user = validatedUser.id;

    next();
  }
  catch(err) {
    res.status(401).json({errorMessage: "Unauthorized 2"});
  }
}

module.exports = auth;

在我的 sn-pRouter.js 文件中,我引入了 auth 并尝试在我的 get 路由器中使用它。如下:

const router = require("express").Router();
const { get } = require("mongoose");
const Snippet = require("../models/snippetModel");
const auth = require("../middleware/auth");

router.get("/", auth, async(req, res) => {
  try{
    console.log(req.user); // <-- stuck here

    const snippets = await Snippet.find();
    res.json(snippets);
  }
  catch(err){
    res.status(500).send();
  }
});

使用 Insomnia,我正在调用 .get 路由器。我应该能够在终端控制台中看到用户 ID,但 Insomnia 给了我“未经授权的 2”错误。

这告诉我在 auth.js 上的 auth 函数的 try 块中发生了一些事情,但我不知道如何弄清楚。我完全按照说明进行操作。

我做错了什么,我该如何解决?

【问题讨论】:

    标签: node.js express react-router jwt mern


    【解决方案1】:

    这行代码:

    const token = req.cookie.token;
    

    应该是:

    const token = req.cookies.token;
    

    因为req.cookie 不存在,您对req.cookie.token 的引用被抛出,因此您进入了catch 块。

    对未来的两点建议。首先,当您在服务器上遇到错误时,请始终记录该错误是什么。

    如果你有这个:

    catch(err){
      console.log(err);
      res.status(500).send();
    }
    

    错误的原因可能很明显,因为 err 会告诉您问题所在。

    其次,当您遇到类似这样的问题时,请添加额外的日志记录以查看所有中间值是什么(或设置断点并在调试器中单步执行)。您可能很快就会发现您从未通过const token = req.cookie.token;,然后您可以登录req.cookie 了解原因。这也会告诉你问题出在哪里。


    我想不用说,前面的一些步骤需要将令牌设置到适当的 Insomnia cookie jar 中,以便令牌出现在 cookie 中。

    【讨论】:

    • 谢谢。我不敢相信我错过了。我一定会利用您对错误的建议。再次感谢。
    猜你喜欢
    • 2015-04-01
    • 2021-09-21
    • 2013-09-30
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多