gpt4 book ai didi

node.js - express app.use middle layer 进行身份验证

转载 作者:可可西里 更新时间:2023-11-01 11:13:29 28 4
gpt4 key购买 nike

我正在尝试利用 app.use 的中间层进行身份验证。我是新手,我在某个地方读到过它,但没有例子。

我目前没有使用 app.use 进行身份验证,但如果有意义的话我想使用,我有一个基于 token 的身份验证,根据要求,我执行一些检查,然后将其路由到目标模块。

我不想使用任何第 3 方模块进行身份验证,因为我有自己的 token 生成和验证例程。问题是我如何在下面使用它,因为我的身份验证系统是异步过程(我有 redis 处理 token )。我无法理解从 app.use 调用我的异步进程,然后在我成功完成后调用 next 然后失败呢?

app.use(function(request, response, next){
next();
});

最佳答案

您已经创建了一个中间件函数,您几乎已经拥有了想要的东西,只是有时您可能只想“使用”它。因此,app.use 仅在您希望对到达服务器的每个请求都使用 token 解析时才适用。您可能有一些路由需要 token ,而其他路由可以对任何人公开,无论是否登录。

您可能缺少的部分是您可以为函数分配一个名称并将其应用于某些路由,但不能应用于其他路由。您可以通过命名中间件函数来完成此操作。

var tokenMiddlewareFn = function(req, res, next) {
// do stuff
next();
}

然后当你想应用它的时候:

app.get('/protected', tokenMiddlewareFn, function(req, res, next) {
// do stuff
}

我通常将我所有的中间件函数放在一个目录中,每个函数都有自己的文件。除了检查身份验证 token 外,我发现一个有用的中间件函数示例是解析分页查询字符串参数,因为许多路由将使用希望以相同的方式解析对此类参数的请求。按照这种用于身份验证目的的样式,您可以在中间件目录中放置一个文件,比如 require-auth.js,如下所示:

module.exports = function (req, res, next) {

var token = req.header('X-App-Auth');

// do what you want with token...perhaps attaching some data to the
// request after you perform the redis lookup
req.userId = what you find in redis

next();
}

然后,当将请求路由到 protected 地方并需要 token 时,您可以执行以下操作:

var requireAuth = require('path/to/middleware/require-auth');

app.get('/protected', requireAuth, function(req, res, next) {
// require auth was run before getting here and
// you now can access req.userId
});

app.get('/unprotected', function(req, res, next) {
// requireAuth was never run...
}

尝试输入一些 console.logs 来亲眼看看中间件是如何工作的。你可以这样做:

var a = function(req, res, next) { 
console.log("...executing a");
next();
}

var b = function(req, res, next) {
console.log("...executing b");
next();
}

var c = function(req, res, next) {
console.log("...executing c");
next();
}

app.use(c);

app.get('/', a, b, function(req, res, next) {
// a, b, and c were already executed in the order of c a b
});

app.get('/test', function(req, res, next) {
// just c was run
});

希望对你有帮助,

克雷格

关于node.js - express app.use middle layer 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30282467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com