NodeJS express-jwt isRevoked给定500内部服务器错误,没有任何消息

bwntbbo3  于 2023-01-08  发布在  Node.js
关注(0)|答案(4)|浏览(208)

我是新的nodejs,expressjs和尝试通过创建一个中间件使用express-jwt包验证路由。一切都工作正常的GET路由,但当我访问POST路由,并试图撤销一个令牌,它返回我500内部服务器错误没有任何消息。我很困惑,这背后的主要原因是什么。所以伙计们请帮助我,如果可能的话。我的代码如下。

const { expressjwt: expressJwt } = require('express-jwt');

function authJwt() {
    const secret = process.env.secret;
    const api = process.env.API_URL;
    return expressJwt({
        secret,
        algorithms: ['HS256'],
        isRevoked: isRevoked
    }).unless({
        path: [
            {url: /\/api\/v1\/products(.*)/ , methods: ['GET', 'OPTIONS'] },
            {url: /\/api\/v1\/categories(.*)/ , methods: ['GET', 'OPTIONS'] },
            `${api}/users/login`,
            `${api}/users/register`,
        ]
    })
}

async function isRevoked(req,payload,done) {
    if(!payload.isAdmin) {
        return done(null, true);
    }
    done();
}


module.exports = authJwt
bnlyeluc

bnlyeluc1#

我是这样解决这个问题的:

async function isRevoked(req, token) {
   
    if(!token.payload.isAdmin) {
        return true
    }
     return undefined;
}

isRevoked接收undefined或true。因此,如果您发现用户不是管理员,则返回undefined,否则返回true

u0sqgete

u0sqgete2#

async function isRevoked(req, token) {
  if (!token.payload.isAdmin) {
    return undefined
  }
  return true;
}

上面的代码在我这边工作得很好,只是切换了undefined和true。

vvppvyoh

vvppvyoh3#

async function isRevoked(req, object) {
  console.log('object', object);
  if (object.payload.isAdmin === false) {
    console.log('This is not admin');
    return true;
  }
     
  console.log('This is admin');
  return false;
}

我们同样在教程中我解决使用此代码

vlf7wbxs

vlf7wbxs4#

async function isRevoked(req, token) {
   
    if(!token.payload.isAdmin) {
        return true
    }
     return undefined;
}

在Postman中运行该API时,该代码“localhost:3000/api/v1/products”返回授权错误,即使承载令牌已加载。

相关问题