中间件无法授权

约翰·比斯利

我正在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;

在我的snippetRouter.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();
  }
});

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

这告诉我,auth.js上auth函数的try块内发生了一些事情,但是我不确定如何弄清楚。我正在按照指示完全按照本教程进行操作。

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

jfriend00

这行代码:

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中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

中间件无法授权

来自分类Dev

Express中间件Passport无法响应未授权

来自分类Dev

注册OAuth授权服务中间件

来自分类Dev

授权中间件不阻塞请求

来自分类Dev

Redux的applyMiddleware无法呈现中间件

来自分类Dev

Django中间件无法正常工作

来自分类Dev

无法在中间件之间传递参数

来自分类Dev

JWT登录-在中间件中未找到授权令牌

来自分类Dev

在中间件中获取当前授权用户

来自分类Dev

如何使用基本 HTTP Django 授权中间件?

来自分类Dev

Laravel 中间件无法正常用于角色中间件

来自分类Dev

认证中间件

来自分类Dev

存根中间件

来自分类Dev

捆绑中间件

来自分类Dev

中间件除外

来自分类Dev

端点包含授权元数据,但是未找到支持授权的中间件

来自分类Dev

Node JS较少中间件无法自动编译

来自分类Dev

无法在快速中间件中获取请求参数

来自分类Dev

我的Django中间件无法正常工作

来自分类Dev

laravel中间件无法按预期工作

来自分类Dev

jQuery File Upload中间件-无法创建图像版本

来自分类Dev

无法在ASP.NET Core中使用中间件

来自分类Dev

Haskell仆人Wai中间件无法正常工作

来自分类Dev

Laravel 中的中间件无法正常工作

来自分类Dev

无法从中间件获取参数到路由中

来自分类Dev

在快速进入每条路线之前如何使用中间件检查授权?

来自分类Dev

带cookie中间件的asp.net核心-授权访问请求数据

来自分类Dev

Laravel'can'中间件返回错误500“此操作未经授权”

来自分类Dev

授权属性/中间件是否可以防止DOS对文件上传的攻击?