在 docker 中运行 pgadmin4 时出现 CSRF 令牌错误请求

emg*_*184 6 postgresql flask pgadmin docker

我正在尝试在反向代理后面的 docker 容器中运行 pgadmin4。PgAdmin4 正在连接到远程数据库。我遇到的问题是我不断收到以下错误:

\n
\nflask_wtf.csrf.CSRFError: 400 Bad Request: The CSRF token is invalid.\n\n
Run Code Online (Sandbox Code Playgroud)\n
pgadmin_1  | Traceback (most recent call last):\npgadmin_1  |   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1811, in full_dispatch_request\npgadmin_1  |     rv = self.preprocess_request()\npgadmin_1  |   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2087, in preprocess_request\npgadmin_1  |     rv = func()\npgadmin_1  |   File "/usr/local/lib/python3.8/site-packages/flask_wtf/csrf.py", line 224, in csrf_protect\npgadmin_1  |     self.protect()\npgadmin_1  |   File "/usr/local/lib/python3.8/site-packages/flask_wtf/csrf.py", line 259, in protect\npgadmin_1  |     self._error_response(e.args[0])\npgadmin_1  |   File "/usr/local/lib/python3.8/site-packages/flask_wtf/csrf.py", line 302, in _error_response\npgadmin_1  |     raise CSRFError(reason)\npgadmin_1  | flask_wtf.csrf.CSRFError: 400 Bad Request: The CSRF token is invalid.\n\n
Run Code Online (Sandbox Code Playgroud)\n

以下是我的撰写文件:

\n
version: "3.3"\nservices:\n  pgadmin:\n    image: dpage/pgadmin4\n    restart: always\n    environment:\n      PGADMIN_DEFAULT_EMAIL: email@domain.com\n      PGADMIN_DEFAULT_PASSWORD: PassPass\n      PGADMIN_LISTEN_PORT: 5050\n      #SCRIPT_NAME: /pgadmin4\n      PGADMIN_LISTEN_ADDRESS: 0.0.0.0\n    ports:\n    - "5050:5050"\n    network_mode: "host"\n    volumes:\n    - pgadmin:/var/lib/pgadmin\n\nvolumes:\n  pgadmin:\n\n
Run Code Online (Sandbox Code Playgroud)\n

和反向代理

\n
# HTTP \xe2\x80\x94 redirect all traffic to HTTPS\nserver {\n    listen 80;\n    listen [::]:80 default_server ipv6only=on;\n    return 301 https://$host$request_uri;\n}\n\n# HTTPS \xe2\x80\x94 proxy all requests to the Node app\nserver {\n    # Enable HTTP/2\n    listen 443 ssl http2;\n    listen [::]:443 ssl http2;\n    server_name servername;\n\n    # Use the Let\xe2\x80\x99s Encrypt certificates\n    # ssl conf\n\n\n    # Include the SSL configuration from cipherli.st\n    include snippets/ssl-params.conf;\n\n    location / {\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-NginX-Proxy true;\n        proxy_pass http://localhost:8081/;\n        proxy_ssl_session_reuse off;\n        proxy_set_header Host $http_host;\n        proxy_cache_bypass $http_upgrade;\n        proxy_redirect off;\n    }\n\n    location /pgadmin4 {\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-NginX-Proxy true;\n        proxy_set_header X-Script-Name /pgadmin4;\n        proxy_set_header Host $host;\n        proxy_pass http://localhost:5050/;\n        proxy_redirect off;\n    }\n\n\n\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

我不知道错误的根源是什么,我已经阅读了以下指南https://www.pgadmin.org/docs/pgadmin4/development/container_deployment.html

\n

但我不确定到底是什么原因造成的

\n

小智 3

对我来说,如果有人在生产中遇到这个问题,管理流量的 Cloudflare 有一个缓存机制。在您浏览 pgadmin 时将站点暂时置于“开发模式”可以解决该问题。任何缓存该站点的内容很可能会导致令牌错误。另外,不要忘记使用 Google 隐身模式来确认您是否没有任何东西来管理您的网站流量。