簡體   English   中英

禁用特定路由上特定動詞的身份驗證中間件

[英]Disable authentication middleware for specific verb on specific route

我正在使用Express / Node,並編寫了一些身份驗證中間件來檢查每個請求上的JWT。

我想為路由(POST'/ api / user /')禁用此中間件,但是我想保留路由(GET'/ api / user /')的中間件。

我該如何實現?

請參見下面的代碼。

app.js

// app.js


app.use('/api/userauth', require('./Controllers/api/userauth.js'))
app.use(require('./Middleware/Authenticate.js'));
app.use('/api/user', require('./Controllers/Api/User.js'));
app.use('/api/item', require('./Controllers/Api/Item.js'));

authenticate.js

//authenticate.js middleware


    var token = req.body.token || req.query.token || req.headers['x-access-token'];


    if (token) {
        jwt.verify(token, secretKey.secretKey, function(err, decoded){
            if (err) {
                return res.json({
                    success : false,
                    message : "failed to auth token."
                })
            } else {
                console.log(decoded);
                req.decoded = decoded;
                next();
            }
        })
    } else {
        res.status(403).send({
            success:false,
            message:'no token provided'
        })
    }
}

API / user.js的

router.route('/')

.get(function(req,res){
    models.User.findAll({
    }).then(function(users){
        res.json(users);
    })
})

.post(function(req,res){
    models.User.create({
        username : req.body.username,
        password : req.body.password,
        firstname : req.body.firstname,
        lastname : req.body.lastname
    }).then(function(user){
        res.json({
            "Message" : "Succesfully created user: ",
            "User: " : user
        });
    });
});
module.exports = router;

舊問題,但是你去了!

而不是使用空白

app.use(require('./Middleware/Authenticate.js'));

對於所有路由,只需在您的子路由器中執行此操作

API / user.js的

var authMiddleware = require('./Middleware/Authenticate.js')
router.route('/')

.get(function(req,res){
    models.User.findAll({
    }).then(function(users){
        res.json(users);
    })
})

.post(authMiddleware, function(req,res){
    models.User.create({
        username : req.body.username,
        password : req.body.password,
        firstname : req.body.firstname,
        lastname : req.body.lastname
    }).then(function(user){
        res.json({
            "Message" : "Succesfully created user: ",
            "User: " : user
        });
    });
});
module.exports = router;

現在,只有具有身份驗證中間件的途徑而不是獲得中間件的途徑!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM