Node.js用户身份验证

时间:2016-09-10 11:16:18

标签: javascript node.js

我是nodeJs的新手,我实际上正在关注它。 在本教程中,使用了一个代码: 在verify.js文件中写入了以下函数:

exports.verifyOrdinaryUser = function (req, res, next) {
    // check header or url parameters or post parameters for token
    var token = req.body.token || req.query.token || req.headers['x-access-token'];

    // decode token
    if (token) {
        // verifies secret and checks exp
        jwt.verify(token, config.secretKey, function (err, decoded) {
            if (err) {
                var err = new Error('You are not authenticated!');
                err.status = 401;
                return next(err);
            } else {
                // if everything is good, save to request for use in other routes
                req.decoded = decoded;
                next();
            }
        });
    } else {
        // if there is no token
        // return an error
        var err = new Error('No token provided!');
        err.status = 403;
        return next(err);
    }
};

并在另一个文件中调用该函数:

/*****........****/
.post(verify.verifyOrdinaryUser, function(req, res, next){
    /******.......*****/

一切正常,没有问题。 1-我不明白为什么不调用函数verify.verifyOrdinaryUser:

verify.verifyOrdinaryUser(req, res, next)

带有他的参数(我们怎么可能在没有参数的情况下调用函数。?

接下来,我写了一个函数:

exports.verifyAdmin = function(req, res, next){
    if(req.decoded._doc.admin == false){
        var err = new Error('You cannot access to this ressource!');
        err.status = 401;
        return next(err);
    }
    else {
        next();
    }
};

在同一个文件中,为了验证用户是否是管理员,我必须在verifyOrdinaryUser函数之后调用此函数, 我的问题是我不知道如何调用此函数,有或没有参数。 谢谢。

1 个答案:

答案 0 :(得分:1)

  

1-我不明白为什么函数verify.verifyOrdinaryUser是   没有这样称呼:verify.verifyOrdinaryUser(req,res,next)

简单来说,那是因为Express负责将这些参数发送到指定的中间件,而不是在此处指定

在函数verify.verifyOrdinaryUser中,函数正在请求3个参数req, res, next并且它接收这三个参数,如果它请求不存在的参数,那么参数值将是{{ 1}}。

  

我的问题是我不知道如何调用此函数   或没有参数。

只需将其称为

即可
undefined

在功能代码中,您可以请求所需的参数

/*****........****/
.post(verify.verifyOrdinaryUser, verify.verifyAdmin, function(req, res, next){
    /******.......*****/

希望这能让你了解最新情况,你应该谷歌搜索Node JS中间件和基于Node JS和Express的简单教程。