1.开启CSRF保护
在创建app实例时
from flask_wtf.csrf import CSRFProtect
def get_app(config_name):
# 创建实例
app = Flask(__name__)
# 开启csrf保护
CSRFProtect(app)
2.对页面HTML加上csrf_token的标签
@html_blue.route('/<re(".*"):file_name>')
def web_html(file_name):
# 当file_name 为空时 默认访问index.html
# 因此要自定义正则转换器
if not file_name:
file_name = 'index.html'
if file_name != 'favicon.ico':
file_name = 'html/%s' % file_name
# 生成响应对象
response = make_response(current_app.send_static_file(file_name))
# 生成csrf_token
csrf_tolen = generate_csrf()
# 将csrf_token 写入cookie中
response.set_cookie('csrf_token', csrf_tolen)
return response
3.对的POST请求的AJAX 的headers添加“X-CSRFToken"
$.ajax({
url:'/api/1.0/sms_code',
type:'post',
data:JSON.stringify(params),
contentType:'application/json',
headers:{'X-CSRFToken':getCookie('csrf_token')},
上面的getCookie() 在js中定义function
function getCookie(name) {
var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
return r ? r[1] : undefined;
}