内部服务器错误 - CSRF 令牌已过期 - wsgi 错误文件 csrf.py 第 110 行 csrf 验证 SyntaxError: invalid syntax

Posted

技术标签:

【中文标题】内部服务器错误 - CSRF 令牌已过期 - wsgi 错误文件 csrf.py 第 110 行 csrf 验证 SyntaxError: invalid syntax【英文标题】:Internal server error - CSRF token has expired - wsgi error file csrf.py line 110 csrf validation SyntaxError: invalid syntax 【发布时间】:2022-01-10 04:37:33 【问题描述】:

在 Ubuntu 18.04 上使用 WSGI 和 Apache 服务器部署烧瓶应用程序的问题

问题:

尝试从浏览器加载网页时显示内部服务器错误。 Wsgi 错误记录描述 flask_wtf csrf.py 文件的问题(无效语法)

记录的 Wsgi 错误(捕获的图像)

wsgi error

我尝试了以前版本的 flask_wtf,因为 csrf.py 中关于如何处理 csrf 令牌的验证错误的代码发生了更改。

结果:无论是最新版本还是过去版本,更改都没有产生任何影响。关于 csrf 令牌验证的同一段代码仍然显示语法错误。

Flask/WTF 版本:

Flask 2.0.2, 烧瓶-WTF 1.0.0, WTForm 3.0.0

Python 版本 3.6.9,Flask WTF 应该支持 > 3.6

不确定这是软件包的错误还是我做错了什么

烧瓶摘录:

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, Email
from flask import Flask, render_template, request
from DB_Insertdata import add_data
import datetime
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)

app.config.update(
    SECRET_KEY="Secret_key",
    WTF_CSRF_SECRET_KEY="a csrf secret key"
)

csrf = CSRFProtect()
csrf.init_app(app)

html 摘录:

        <div id="Form">
            <form action='/' method='POST' autocomplete="off">
                <!--      form.csrf_token     -->
                <input type="hidden" name="csrf_token" value=" csrf_token() ">
                <div id="name">
                    <div id="name_label">  form.entered_name.label  </div>  form.entered_name()  </div>
                <div id="email">
                    <div id="email_label">  form.entered_email.label  </div>  form.entered_email()  </div>
                <div id="submitbtn">  form.submit  </div>
            </form>

Apache 配置文件

<VirtualHost *:80>
    
    ServerName wordr.com
    WSGIDaemonProcess flaskapp user=www-data group=www-data threads=5
    WSGIScriptAlias / /var/www/wordr/wordr.wsgi

    <Directory /var/www/wordr>
    WSGIProcessGroup flaskapp
    WSGIApplicationGroup %GLOBAL
        Order deny,allow
        Allow from all
    </Directory>

    Alias /static /var/www/wordr/static

    <Directory /var/www/wordr/static/>
        Order deny,allow
        Allow from all
    </Directory>

    ErrorLog /var/www/wordr/logs/error.log
    CustomLog  /var/www/wordr/logs/access.log combined

</VirtualHost>

【问题讨论】:

请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。 【参考方案1】:

解决方案: 升级了 mod_wsgi,脚本可以运行了。 apt-get install libapache2-mod-wsgi-py3

问题: Python 3.6.9 在我的系统路径中,但由于配置了 mod_wsgi/4.5.17 Python/2.7,所以使用了 mod_wsgi 版本 Python2.7。

注意:Flask-WTF 15.0 及更高版本对 Python 3.6 之前的任何版本的支持已被删除。

【讨论】:

以上是关于内部服务器错误 - CSRF 令牌已过期 - wsgi 错误文件 csrf.py 第 110 行 csrf 验证 SyntaxError: invalid syntax的主要内容,如果未能解决你的问题,请参考以下文章

错误:Firebase ID 令牌已过期

在 laravel 5.5 的验证 csrf 令牌中没有收到错误令牌不匹配异常

如何在调用WS之前等待某事

如何识别OAuth令牌是否已过期?

加载操作中的 BigQuery 错误:令牌无效 - 令牌无效:无状态令牌已过期

Symfony 1.4:表单中 CSRF 的自定义错误消息