1.设置随机字符串,尽量大一些
var csrfToken=parseInt(Math.random()*999999,10);
ctx.cookies.set('csrfToken',csrfToken)
console.log(ctx.cookies.get('csrfToken'))
2.在表单中提交的数据中加入csrfToken
if(post){
ctx.render('post', {post, comments, csrfToken});
}else{
ctx.status = 404;
}
3.在页面的表单中加入token
实际应用中可以将input进行隐藏,然后进行表单提交给后端进行校验。
.input-field
input(name="csrfToken",value=csrfToken)
3.token验证,通过验证则可以发表评论
//token验证
if(!data.csrfToken){
throw new Error('csrfToken 为空')
}
if(data.csrfToken !== ctx.cookies.get('csrfToken')){
throw new Error('csrfToken 错误')
}
注意:如果是ajax请求可以将token放入meta中:
<meta name="csrf-param" content="_csrf">
然后在提交数据时,获取meta中的token,一起发送到后端,后端进行校验