NodeJS Auth中间件总是打印未定义的角色

ttp71kqs  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(94)

我用express和mysql为我的后台创建电子商务应用程序。我需要使用中间件来保护我的路由,并检查用户是卖家还是客户,然后我尝试使用auth中间件,但它仍然抛出错误。
这里是中间件

const jwt = require('jsonwebtoken');

const auth = (req, res, next) => {
  try {
    const token = req.headers.authorization.split(' ')[1];

    if (!token) {
      return res.status(401).json({
        status: 'error',
        error: 'Authentication failed',
      });
    }

    const decodedToken = jwt.verify(token, 'JWT_SECRET');
    req.user = decodedToken;
    console.log(req.user.role);
    

    next();
  } catch (error) {
    return res.status(500).json({
      status: 'error',
      data: error.message,
    });
  }
};

const isSeller = (req, res, next) => {
  try{
    //console.log(req.user.role);
    if (!req.user || req.user.role !== 'seller') {
      return res.status(403).json({
        status: 'error',
        error: 'User is not a seller',
      });
    }
    next();
  }catch (error) {
    return res.status(500).json({
      status: 'error',
      error: error.message,
    });
  }
};

module.exports = {
  auth,
  isSeller,
};

我试着检查为什么它总是抛出一个错误,我把console.log检查它,它打印undefined。我需要知道为什么它是未定义的。
这是用户登录时生成的令牌。

const token = jwt.sign(
    { 
      userId: existingUserByUsername.id,
      username: existingUserByUsername.username,
      email: existingUserByUsername.email,
      role: existingUserByUsername.role
    },
    'JWT_SECRET'
  );
  return token;
vsaztqbk

vsaztqbk1#

我跳过你的代码只是按照这个步骤
首先定义认证中间件

const authMiddleware = (req, res, next) => {
//your codes
//extend request object
const decodedToken = jwt.verify(token, 'JWT_SECRET');; 
req.user =  decodedToken;
 }

将authMiddleware应用于路由

app.get('/somePath',authMiddleware, isSeller );

最后接收扩展请求对象

const  isSeller = (req, res, next) => {
// extract user object
  const userObject =req.user;
 // your codes
 }

相关问题