Как отключить csrf для вида с flask-wft для рестапа? - PullRequest
0 голосов
/ 16 февраля 2019

У меня проблема с отключением csrf с помощью flask-wtf для повторного ввода.Проблема аналогична следующей: Flask-Restful POST не выполняется из-за CSRF-защиты Flask-WTF , но я использую колбу оригинальную, а не колбу-отдых.

Я использую @csrf.exempt decorator , и я сделал точно такую ​​же документацию, но все равно не могу отключить csrf.Вот мой код, вы знаете, в чем проблема?

myApp.py

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)    
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SECRET_KEY'] = "secret"

db = SQLAlchemy(app)

csrf = CSRFProtect(app) # initialize the csrf protect

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String())

class myForm(FlaskForm):
    username = StringField("user name")

@app.route("/check", methods=['POST'])    
@csrf.exempt # why this code doesn't work???!!! :(
def check():
    form = myForm(request.form)

    if form.validate():
        user = User(username=form.username.data)
        db.session.add(user)
        db.session.commit()
        return jsonify(message="user saved!"), 200
    else:
        return jsonify(message=form.errors), 404

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

Мой почтальон всегда возвращает:

{
    "message": {
        "csrf_token": [
            "The CSRF token is missing."
        ]
    }
}

1 Ответ

0 голосов
/ 16 февраля 2019

FlaskForm.validate(), по-видимому, возвращает эту ошибку, т. Е. Попробуйте

form = myForm(request.form, csrf_enabled=False)

или

class myForm(FlaskForm):
    class Meta:
        csrf = False

     username = StringField("user name")

, поскольку csrf_enabled представляется устаревшим.

Из документации

Любое представление, использующее FlaskForm для обработки запроса, уже получает защиту CSRF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...