获取CSRF令牌并分配给变量

时间:2019-08-25 15:25:02

标签: python flask csrf flask-wtforms

我想获取flask-wtf提供的csrf令牌并将其分配给变量,以供将来与我的flask应用程序体系结构一起使用。有一种方法可以使用隐藏字段{{ form.csrf_token }}或通过csrf_token()来渲染jinja。但是文档没有提到如何实现以下目标:

from flask import Flask, jsonify
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)
app.secret_key = 'secret'
csrf = CSRFProtect(app)


@app.route('/api/get/endpoint_which_returns_json/', methods=['GET'])
def api():
    csrf_token = # ??? what belongs here ???
    return jsonify({'token': csrf_token})


if __name__ == '__main__':
    app.run(debug=True)

如何实现?预先谢谢你。

1 个答案:

答案 0 :(得分:0)

当您通过Flask-WTF在模板中使用{{ form.csrf_token }}{{ csrf_token() }}时,它们只是在调用flask_wtf.csrf.generate_csrf()函数。您可以导入它并自己调用它以在视图内部生成令牌:

from flask_wtf.csrf import generate_csrf

@app.route('/', methods=['GET'])
def api():
    return jsonify({'token': generate_csrf()})

我假设这里的想法是api客户端将负责将带有POST请求的令牌返回给您的其他api资源?如果您只是在生成令牌服务器端,以便能够验证原本需要的令牌,请you may as well just disable CSRF protection