作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!