首页 > 解决方案 > Python,Flask WTF:会话中缺少令牌

问题描述

我有 :

这是我的 CSRF 后端代码:

from flask import Flask
from flask_cors import CORS
from flask_wtf.csrf import CSRFProtect, generate_csrf

app = Flask(__name__)
CSRFProtect(app)
CORS(app)

@app.after_request
def inject_csrf_token(response):
    csrf_token = generate_csrf()
    response.set_cookie('csrf_token', csrf_token)
    return response

前端代码:

import axios from 'axios';
import Cookies from 'js-cookie'

const API_URL = `https://${window.location.hostname}:7000/v2/`;

const api = axios.create({
    baseURL: API_URL,
    headers: {
        'Content-Type': 'application/json',
        'X-CSRF-Token': Cookies.get('csrf_token')
    }
});

export default api;

如您所见,当我向我的 API 发布请求时,CSRF 令牌在这里:

X-CSRF-令牌:IjNhM2YxY2ZhNDcyYzMzZDFlZjhlMWExYmMzMWNmNTI3NzFhNDhkMjki.X9Ce-Q.E_5se2uLaCaQDAiYUOMZ4kVNtBs

但我收到了这样的回应:

400 错误请求 CSRF 会话令牌丢失。

问题似乎出在烧瓶会话中:当我session从烧瓶调试对象时,存在令牌:

会话在烧瓶 after_request 处理程序中包含令牌

但是在 Flask WTF CSRFProtect 代码中是空的

来自 Flask-WTF 的 CSRFProtect 代码中的会话为空

我正在使用 Flask-WTF==0.14.3

解决此会话问题的任何帮助将不胜感激

标签: pythonsessionflaskcookiesflask-wtforms

解决方案


推荐阅读