代码如下:
app.use(csrf());
app.post('/post', function(req, res){
res.send(req.body.test).end();
})
app.get('/', function(req, res){
console.log(req.csrfToken());
res.send('<form method="post" action="/post"><input type="text" name="test"><input type="submit"><input type="hidden" name="_csrf" value="'+req.csrfToken()+'"> </form>');
});
如果表单中不包括_csrf会导致node中一个异常。我想当异常触发则转发到一个错误页面,而不是将异常输出出来。。这个怎么搞?
6 回复
看csrf中间件源代码中的verifytoken()
函数,当校验失败时,会丢出一个Error
对象:
var err = new Error('invalid csrf token')
err.status = 403
throw err
所以,你要在主程序中加上一个处理Error
的中间件:
app.use(function(err, req, res, next) {
if (err.status && err.status === 403 && err.message && err.message === 'invalid csrf token') {
// your handler
} else {
next(err, req, res);
};
});
总结:看项目的文档和源代码,是解决问题的重要手段。