【问题标题】:Adding middleware to check API key & pass添加中间件以检查 API 密钥并通过
【发布时间】:2014-01-31 01:50:17
【问题描述】:

在决定使用 node 和 restify 编写我的下一个 API 之后,我才刚刚开始学习 node.js。只有几个用户访问该 API,而且它是一个严格的私有用户 - 其他任何人都不能访问它。

基本上,我需要检查是否为每个请求提供了(并且有效)“key”和“pass”参数。所以,我想我可以添加一些在执行检查之前执行的中间件。例如:

var restify = require('restify');

var server = restify.createServer({
    name: 'test'
});

server.use(function(req, res, next) {
    if (req.params.key == null) {
        console.log("No API key supplied");
        return next(new restify.NotAuthorizedError("No API key supplied"));
    }
});
server.use(restify.bodyParser());


server.listen(8888, function() {
    console.log('%s listening at %s', server.name, server.url);
});

server.get('/test', function(req, res, next) {
    res.send('Hello World');
    return next();
});

浏览到localhost:8888/test 会得到{"code":"NotAuthorized","message":"No API key supplied"},这正是我想要的。

但是,浏览到http://localhost:8888/test?key=a 仍然会给出相同的消息..

显然,我不会以正确的方式解决这个问题。有人能指出我正确的方向吗?

提前致谢。

【问题讨论】:

    标签: node.js express restify


    【解决方案1】:

    我需要添加 restify.queryParser() 来解析 GET 参数。现在,这行得通:

    var restify = require('restify');
    
    var server = restify.createServer({
        name: 'test'
    });
    
    server.use(restify.queryParser());
    server.use(restify.bodyParser());
    server.use(function(req, res, next) {
        if (req.query.key == null) {
            console.log("No API key supplied");
            return next(new restify.NotAuthorizedError("No API key supplied"));
        } else return next();
    });
    
    server.listen(8888, function() {
        console.log('%s listening at %s', server.name, server.url);
    });
    
    server.get('/test', function(req, res, next) {
        res.send('Hello World');
        return next();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2020-10-31
      • 2011-01-07
      相关资源
      最近更新 更多