NodeJS 无法使用express-除非免除几条路由的身份验证

sirbozc5  于 2023-04-05  发布在  Node.js
关注(0)|答案(4)|浏览(206)

我对js和nodejs还很陌生,所以我尝试使用 express-jwt 来验证我的大多数api。
但是,我想免除像**/login/register**这样的路由的身份验证
在看过 express-jwt 的文档后,我了解到有一个名为 express-unless 的库
所以,我模仿了这个例子,看看是否能让它工作。

const unless = require('express-unless');

app
  .use(authenticateWithExpressJWT)
  .unless({ path: ['/login'] });

authenticateWithExpressJWT是我的中间件函数,工作正常

const jwt = require('express-jwt');

const verifyJwt = jwt({ secret: 'secreyKey', algorithms: ['HS256'] });

module.exports.authenticateWithExpressJWT = verifyJwt;

当我在Google或Stackoverflow上搜索示例时,似乎其他人使用类似代码没有任何问题。然而,当我这样做时,它甚至无法编译。我得到了这个错误

app.use(authenticateWithExpressJWT).unless({ path: ['/login'] });
                                    ^

TypeError: app.use(...).unless is not a function
    at Object.<anonymous> (/home/xyz/programming/node/firstApp/index.js:27:37)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

谁能帮我看看我到底做错了什么
我还有一个问题为什么没有require('express-unless');的情况下,人们也能使用unless()方法?
不管我是否添加const unless = require('express-unless');,我都会得到上面提到的编译错误

注意我知道不用express-unless也能做到,我只想知道怎么用。

wnavrhmk

wnavrhmk1#

我个人没有使用过express-unless,但根据文档,你应该能够做到这一点,因为express-jwt本身支持unless

const jwt = require('express-jwt');

const verifyJwt = jwt({ secret: 'secreyKey', algorithms: ['HS256'] })
                  .unless({path: ['/login'] });

module.exports.authenticateWithExpressJWT = verifyJwt;

在您的应用程序中,只需使用您的中间件:

app.use(authenticateWithExpressJWT)
hpxqektj

hpxqektj2#

我通常通过创建如下所示的函数来免除auth的路由。

function authJwt() {
return expressjwt({
    'secret',
    algorithms: ['HS256'],
    isRevoked: isRevoked,
}).unless({
    path: ['/login'],
});
}

async isRevoked(req, payload, done){
   // your code goes here for revoking
}

然后在入口点(index.js/app.js)导入authJwt并在整个应用中使用它。

app.use(authJwt())
zbsbpyhn

zbsbpyhn3#

我也面临着同样的问题,认为最新版本有问题,所以我使用“express-unless”:“^1.0.0”.对我来说效果很好。
使用这个版本的软件包,我认为它的快速修复这个问题

"express-unless":"^1.0.0"
yrefmtwq

yrefmtwq4#

使用如下;这将工作.我发现这从express-unlessgithub-readme文件

const {unless} = require("express-unless");

    "functionName".unless = unless;
    app.use(
    "functionName".unless({
        path: "routes",
  })

相关问题