Express.js中某些路由的可选端点身份验证

时间:2014-12-22 00:06:15

标签: node.js authentication express

有哪些方法需要对某些 API端点进行身份验证,而不是针对其他人进行身份验证?

理想情况下,"可写" DELETE /users/{user_id}PUT /items/{item_id}等端点需要身份验证,而GET /items之类的只读端点则不需要身份验证。

一种可能的解决方案是在每个请求处理程序中进行手动函数调用,但这不是非常干:

app.get('/users', function(req, res) {
    res.status(200).send();
});

app.post('/users', function(req, res) {
    if (!req.authenticated) return res.status(401).send();
    work();
});

1 个答案:

答案 0 :(得分:1)

您可以使用 req.method 在中间件 app.use 中执行此操作。这将具有http动词(GET,PUT,DELETE,POST)

app.use(function(req, res, next) {
    if (req.method === 'POST' || req.method === 'PUT' || req.method === 'DELETE') {
        if (!req.authenticated) return res.status(401).send();
        next();
    }
});

如果您使用的是epxress 4.0+,那么我们可以使用router.use中间件。

router.use(function(req, res, next) {
    if (req.method === 'POST' || req.method === 'PUT' || req.method === 'DELETE') {
        if (!req.authenticated) return res.status(401).send();
        next();
    }
});

您将使用router.get / post / put / delete而不是app.get / post / put / delete。