对于我的登录页面,我启用了一个验证码,用户必须输入图片中显示的4位数字。我为此使用flask-session-captcha模块。我遵循了与说明中完全相同的步骤。
在同一登录页面中,我还有一个隐藏的CSRF令牌。
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
当我在本地环境(笔记本电脑)中开发和测试它时,它可以正常工作,但是当我在测试服务器中对其进行测试时,它不起作用。它将出现诸如“ CSRF令牌不匹配”之类的错误。或“无效的验证码”(即使我回答正确),有时甚至是“缺少CSRF令牌”。
我已经尝试了很多事情,例如对该特定登录页面使用装饰器@csrf_exempt。我还添加了这个:
@app.after_request
def apply_caching(response):
response.headers["X-Frame-Options"] = "SAMEORIGIN"
response.headers["Cache-Control"] = "public, max-age=0, no-cache, no-store, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "0"
return response
但是似乎没有任何效果。这真的使我感到困惑,为什么它可以在本地而不在测试服务器上工作。我尝试在登录页面中不使用csrf_token(),但是它给了我缺少csrf令牌的错误。不能使用Google ReCaptcha,因为用户不想使用它。
我想知道是否是因为验证码令牌与csrf令牌冲突了?
答案 0 :(得分:0)
您可以尝试flask_recaptcha吗?
下面是最小化的示例。
WebDriverWait