Node.js用户认证

Node.js User Authentication

本文关键字:认证 用户 js Node      更新时间:2023-09-26

我是新的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-我不明白为什么功能验证。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-我不明白为什么函数验证。verifyOrdinaryUser是未调用:验证。verifyOrdinaryUser(req, res, next)

用最简单的术语来说,这是因为Express负责将这些参数发送到指定的中间件,而不是您在这里指定

在函数verify.verifyOrdinaryUser中,函数请求3个参数req, res, next并接收到这3个参数,如果请求的参数不存在,则该参数值为undefined

我的问题是我不知道如何调用这个函数或者不带参数

就叫它

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

在函数代码中你可以请求你需要的参数

exports.verifyAdmin = function(req, res){
    if(req.decoded._doc.admin == false){
    ...

希望这能给你一些感觉,你应该谷歌Node JS中间件和基于Node JS和Express的简单教程。