Docker上的Flask-WTF CSRF标记错误

提交Flask-WTF表单后,我看到错误“会话令牌丢失”或“CSRF令牌不匹配”。 这个错误只发生在使用Docker-compose的Docker上运行,也就是说,当我正常运行Flask应用程序时,没有CSRF错误。 我使用Flask-WTF 0.14.2,Docker 17.03.1-ce,Docker-compose 1.13.0-rc1

有可能是因为你在使用Docker Machine,而你的SERVER_NAME设置为192.168.99.100 (或者默认的Docker Machine IP)。

我注意到,大多数基于webkit的浏览器不会为基于IP的域设置cookie,但它们允许localhost

你可以做的一个select是:

  • 编辑你的/etc/hosts文件,join: 192.168.99.100 local.docker (如果不同,用你的Docker Machine IP地址replace这个IP)。

  • 将您的SERVER_NAME更改为使用local.docker

如果你想看到这个完整的写作,我一会儿在https://nickjanetakis.com/blog/fix-missing-csrf-token-issues-with-flask博客。