保护特定路由node.js

时间:2016-06-08 18:26:24

标签: javascript node.js

嘿我正在使用Node.JS的基本身份验证来保护路由。我对Node.JS很陌生,并且不了解下一个函数在这种情况下的作用。我要做的是确保路线:/admin/

注意:这是一个用于学习目的的项目,因此登录部分不会太严重,也不会实时使用。

authentication.js

var basicAuth = require('basic-auth');

exports.BasicAuthentication = function(request, response, next) {

    function unauthorized(response) {
        response.set('WWW-Authenticate', 'Basic realm=Authorization Required');
        return response.send(401);
    };

    var user = basicAuth(request);

    if (!user || !user.name || !user.pass) {
        return unauthorized(response);
    };

    if (user.name === 'name' && user.pass === 'pass') {
        return next();
    } else {
        return unauthorized(response);
    };

};

和我导入模块身份验证的app.js:

app.get('/admin/', authentication.BasicAuthentication, function(req, res){
    console.log("hi u need to login");
});

所以我想要做的是在身份验证通过时进一步路由用户。

提前致谢!

2 个答案:

答案 0 :(得分:2)

尝试:

app.get('/admin/', authentication.BasicAuthentication);
app.get('/admin/', function(req, res) {});

答案 1 :(得分:1)

此功能称为中间件:

var basicAuth = require('basic-auth');

exports.BasicAuthentication = function(request, response, next) {

    function unauthorized(response) {
        response.set('WWW-Authenticate', 'Basic realm=Authorization Required');
        return response.send(401);
    };

    var user = basicAuth(request);

    if (!user || !user.name || !user.pass) {
        return unauthorized(response);
    };

    if (user.name === 'name' && user.pass === 'pass') {
        return next();
    } else {
        return unauthorized(response);
    };

};

中间件是一个可以为各种目的定义的函数:

  1. using middleware
  2. writing a middleware
  3. 一种简单的方法是在执行另一个操作之前运行的功能,一个通用目的是保护某些路由以进行未经授权的访问。

    您可以保护私有路由,然后调用authentication.BasicAuthentication before function(req,res){}

    一些例子:

    app.get('/user-profile/', authentication.BasicAuthentication, function(req, res){
        //private info
    });
    
    app.get('/foo/', function(req, res){
        //public info
    });