javascript - 禁用特定路由上特定动词的身份验证中间件

标签 javascript authentication express web

我正在使用 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;

最佳答案

老问题,但给你!

而不是使用空白<​​/p>

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;

现在,只有该路由具有身份验证中间件,而不是 get 中间件!

关于javascript - 禁用特定路由上特定动词的身份验证中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365186/

相关文章:

JavaScript 不工作。显示无法读取属性

javascript - 在显示模态对话框的按钮上设置的工具提示在关闭对话框后重新出现

api - 除了 SSL,我还需要什么?为什么

paypal - 无法登录 PayPal 沙盒帐户

java - 在 Spring Boot 中设置自己的安全性

javascript - Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的 token 错误

javascript - 隐藏/保护 Windows 8 应用程序中的 Javascript 源代码

javascript - 如何根据用户语言格式化日期并显示月份和日期

node.js - express.js 示例应用程序

node.js - 如何从 blob/formdata 在 Node 服务器上写入音频文件