[GH-ISSUE #4696] [bug]: Admin panel requests authentication setup despite being configured in .env #1750

Closed
opened 2026-03-16 21:36:54 +03:00 by kerem · 4 comments
Owner

Originally created by @Palaos1510 on GitHub (Jan 24, 2025).
Original GitHub issue: https://github.com/hoppscotch/hoppscotch/issues/4696

Is there an existing issue for this?

  • I have searched the existing issues

Current behavior

We are running Hoppscotch using docker-compose, and the .env file is correctly configured, including authentication keys. However, when accessing the admin panel, it asks us to set up an authentication method to proceed.

Image

🔍 Expected Behavior

Since we have already defined VITE_ALLOWED_AUTH_PROVIDERS=EMAIL,GOOGLE in our .env, the admin panel should recognize the configured authentication methods and allow access without requiring additional setup.

Current Behavior

The frontend loads normally without any issues.

Image

  • The admin panel does not detect authentication settings and asks us to configure them.
    
  • No errors appear in the console (neither in frontend nor backend).
    
  • No 4xx or 5xx error codes appear in network requests.
    
  • Backend and database are running correctly.
    
  • We followed the documentation recommendation of having a separate URL for the admin panel (VITE_ADMIN_URL=https://admin.hopp.example.com) instead of serving it from the same frontend domain.
    

🛠 Current Configuration

Our .env file contains:

`

# ------------------------------------------------------------------------------
# Database & JWT Configuration
# ------------------------------------------------------------------------------
DATABASE_URL=postgresql://postgres:OFUSCATED@hoppscotch-db:5432/hoppscotch?connect_timeout=300
JWT_SECRET=OFUSCATED
SESSION_SECRET=OFUSCATED
ALLOW_SECURE_COOKIES=true
DATA_ENCRYPTION_KEY=OFUSCATED

# ------------------------------------------------------------------------------
# Token Configuration
# ------------------------------------------------------------------------------
TOKEN_SALT_COMPLEXITY=10
MAGIC_LINK_TOKEN_VALIDITY=3
REFRESH_TOKEN_VALIDITY=604800000
ACCESS_TOKEN_VALIDITY=86400000

# ------------------------------------------------------------------------------
# Hoppscotch Configuration
# ------------------------------------------------------------------------------
REDIRECT_URL=https://hupp.example.com
ENABLE_SUBPATH_BASED_ACCESS=false

# Base and Backend URLs
VITE_BASE_URL=https://hupp.example.com
VITE_SHORTCODE_BASE_URL=https://hupp.example.com
VITE_ADMIN_URL=https://admin.hupp.example.com
VITE_BACKEND_GQL_URL=https://hupp.example.com/graphql
VITE_BACKEND_WS_URL=wss://hupp.example.com/graphql
VITE_BACKEND_API_URL=https://hupp.example.com/v1
VITE_ALLOWED_AUTH_PROVIDERS=EMAIL,GOOGLE

# ------------------------------------------------------------------------------
# Google Auth Configuration
# ------------------------------------------------------------------------------
GOOGLE_CLIENT_ID=OFUSCATED
GOOGLE_CLIENT_SECRET=OFUSCATED
GOOGLE_REDIRECT_URL=https://hupp.example.com/auth/callback/google
GOOGLE_SCOPE=email,profile

# ------------------------------------------------------------------------------
# SMTP Configuration
# ------------------------------------------------------------------------------
MAILER_SMTP_ENABLE=true
MAILER_USE_CUSTOM_CONFIGS=true
MAILER_ADDRESS_FROM=OFUSCATED

# SMTP Individual Configuration
MAILER_SMTP_HOST=OFUSCATED
MAILER_SMTP_PORT=465
MAILER_SMTP_SECURE=true
MAILER_SMTP_USER=OFUSCATED
MAILER_SMTP_PASSWORD=OFUSCATED
MAILER_TLS_REJECT_UNAUTHORIZED=true

# Additional Email Variables
EMAIL_HOST=OFUSCATED
EMAIL_PORT=465
EMAIL_USE_TLS=False
EMAIL_USE_SSL=True
EMAIL_HOST_USER=OFUSCATED
EMAIL_HOST_PASSWORD=OFUSCATED
DEFAULT_FROM_EMAIL=OFUSCATED

# ------------------------------------------------------------------------------
# Rate Limiting
# ------------------------------------------------------------------------------
RATE_LIMIT_TTL=60
RATE_LIMIT_MAX=100
WHITELISTED_ORIGINS=https://hupp.example.com,https://admin.hupp.example.com

`

Our docker-compose.yml configuration:

`

  services:
    hoppscotch-frontend:
      image: hoppscotch/hoppscotch-frontend
      container_name: hoppscotch-frontend
      env_file:
        - .env
      ports:
        - "127.0.0.1:3000:3000"
      restart: unless-stopped
      depends_on:
        - hoppscotch-backend
  
    hoppscotch-backend:
      image: hoppscotch/hoppscotch-backend
      container_name: hoppscotch-backend
      env_file:
        - .env
      ports:
        - "127.0.0.1:3100:3100"
      restart: unless-stopped
      depends_on:
        - hoppscotch-db
      environment:
        - PORT=3100  
  
    hoppscotch-admin:
      image: hoppscotch/hoppscotch-admin
      container_name: hoppscotch-admin
      env_file:
        - .env
      ports:
        - "127.0.0.1:8080:3100"
      restart: unless-stopped
      depends_on:
        - hoppscotch-backend
  
    hoppscotch-db:
      image: postgres:16
      container_name: hoppscotch-db
      environment:
        POSTGRES_DB: hoppscotch
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: OFUSCATED
      volumes:
        - hoppscotch_data:/var/lib/postgresql/data
      expose:
        - "5432"
      restart: unless-stopped
  
  volumes:
    hoppscotch_data:

`

and this is my nginx.conf: for the site

`

  server {
     listen 80;
     server_name admin.example.com;
     return 301 https://$host$request_uri;
  }
  
  server {
     listen 443 ssl;
     server_name admin.example.com;
  
     ssl_certificate /etc/letsencrypt/live/admin.example.com/fullchain.pem;
     ssl_certificate_key /etc/letsencrypt/live/admin.example.com/privkey.pem;
     include /etc/letsencrypt/options-ssl-nginx.conf;
     ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  
     set $allowed_origin "*";
     if ($http_origin ~* "^https?://(frontend\.example\.com|admin\.example\.com)$") {
         set $allowed_origin $http_origin;
     }
  
     location / {
         add_header 'Access-Control-Allow-Origin' "$allowed_origin" always;
         add_header 'Access-Control-Allow-Credentials' 'true' always;
         add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
         add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since,content-type' always;
  
         if ($request_method = 'OPTIONS') {
             add_header 'Access-Control-Max-Age' 1728000 always;
             add_header 'Content-Type' 'text/plain charset=UTF-8' always;
             add_header 'Content-Length' 0 always;
             return 204;
         }
  
         proxy_pass http://127.0.0.1:8080;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
     }
  }

`

🛑 Debugging Logs
Hoppscotch Admin Logs (docker compose logs hoppscotch-admin)

`

WARN[0000] /home/hoppscotch-aio-proxy/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6464105,"msg":"using config from file","file":"/etc/caddy/sh-admin-multiport-setup.Caddyfile"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6479352,"msg":"adapted config to JSON","adapter":"caddyfile"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6479495,"msg":"Caddyfile input is not formatted; run 'caddy fmt --overwrite' to fix inconsistencies","adapter":"caddyfile","file":"/etc/caddy/sh-admin-multiport-setup.Caddyfile","line":2}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6501977,"logger":"admin","msg":"admin endpoint disabled"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6507666,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc000507100"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6509018,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv1","http_port":80}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6523373,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":3100"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6523476,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":3100"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.652352,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.652854,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":80"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6528647,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":80"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6528687,"logger":"http.log","msg":"server running","name":"srv1","protocols":["h1","h2","h3"]}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6528783,"msg":"serving initial configuration"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6577804,"logger":"tls","msg":"cleaning storage unit","storage":"FileStorage:/data/caddy"}
hoppscotch-admin  | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.663546,"logger":"tls","msg":"finished cleaning storage units"}

`

Hoppscotch Backend Logs (docker compose logs hoppscotch-backend)

`

hoppscotch-backend  | Backend Server | Fri, 24 Jan 2025 20:40:51 GMT express-session deprecated undefined resave option; provide resave option at dist/main.js:41:13
hoppscotch-backend  | Backend Server | Fri, 24 Jan 2025 20:40:51 GMT express-session deprecated undefined saveUninitialized option; provide saveUninitialized option at dist/main.js:41:13
hoppscotch-backend  | Backend Server | Enabling CORS with production settings
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RoutesResolver] AppController {/ping}: +40ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/ping, GET} route +4ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RoutesResolver] AuthController {/auth} (version: 1): +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/providers, GET} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/signin, POST} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/verify, POST} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/refresh, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/google, GET} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/google/callback, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/github, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/github/callback, GET} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/microsoft, GET} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/microsoft/callback, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/logout, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/auth/verify/admin, GET} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RoutesResolver] SiteController {/site} (version: 1): +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/site/setup, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/site/setup, PUT} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RoutesResolver] TeamCollectionController {/team-collection} (version: 1): +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/team-collection/search/:teamID, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RoutesResolver] HealthController {/health}: +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/health, GET} route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RoutesResolver] AccessTokenController {/access-tokens} (version: 1): +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/access-tokens/create, POST} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/access-tokens/revoke, DELETE} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/access-tokens/list, GET} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/access-tokens/collection/:id, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/access-tokens/environment/:id, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RoutesResolver] InfraTokensController {/infra} (version: 1): +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/user-invitations, POST} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/user-invitations, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/user-invitations, DELETE} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/users, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/users/:uid, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/users/:uid, PATCH} (version: 1) route +1ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/users/:uid, DELETE} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/users/:uid/admin-status, PATCH} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:51 PM     LOG [RouterExplorer] Mapped {/infra/users/:uid/workspaces, GET} (version: 1) route +0ms
hoppscotch-backend  | Backend Server | Initialize PubSub
hoppscotch-backend  | Backend Server | GOOGLE SSO auth provider(s) are not configured properly in .env file. Do configure them from Admin Dashboard.
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:52 PM     LOG [GraphQLModule] Mapped {/graphql, POST} route +619ms
hoppscotch-backend  | Backend Server | [Nest] 19  - 01/24/2025, 8:40:52 PM     LOG [NestApplication] Nest application successfully started +11ms
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 17
hoppscotch-backend  | Backend Server | Query Complexity: 3
hoppscotch-backend  | Backend Server | Query Complexity: 4
hoppscotch-backend  | Backend Server | Query Complexity: 3
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 4
hoppscotch-backend  | Backend Server | Query Complexity: 17
hoppscotch-backend  | Backend Server | Query Complexity: 3
hoppscotch-backend  | Backend Server | Query Complexity: 3
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7
hoppscotch-backend  | Backend Server | Query Complexity: 7

`

Questions

1. Are there any additional steps required for the admin panel to recognize authentication settings?

2.  Could there be a caching issue preventing the admin panel from reading the .env values?

3. Is there a specific backend verification that we should check?

Steps to reproduce

Deploy Hoppscotch Community Edition using docker-compose, ensuring that the .env file is properly configured with authentication settings (VITE_ALLOWED_AUTH_PROVIDERS=EMAIL,GOOGLE).

Follow the official recommendation to host the admin panel on a separate URL (e.g., VITE_ADMIN_URL=https://admin.hupp.example.com).
Start the services using:

docker-compose up -d

Access the frontend (https://hupp.example.com) and verify that it loads without issues.
Try accessing the admin panel (https://admin.hupp.example.com).
Observe that the admin panel asks to set up an authentication method, even though authentication is already configured in .env.

Environment

Production

Version

Cloud

Originally created by @Palaos1510 on GitHub (Jan 24, 2025). Original GitHub issue: https://github.com/hoppscotch/hoppscotch/issues/4696 ### Is there an existing issue for this? - [x] I have searched the existing issues ### Current behavior We are running Hoppscotch using docker-compose, and the .env file is correctly configured, including authentication keys. However, when accessing the admin panel, it asks us to set up an authentication method to proceed. ![Image](https://github.com/user-attachments/assets/8cac7e74-f119-4feb-872a-8aec1848b610) 🔍 Expected Behavior Since we have already defined VITE_ALLOWED_AUTH_PROVIDERS=EMAIL,GOOGLE in our .env, the admin panel should recognize the configured authentication methods and allow access without requiring additional setup. ✅ Current Behavior The frontend loads normally without any issues. ![Image](https://github.com/user-attachments/assets/4165d28b-aa9b-4441-9bb3-f17780370e18) - The admin panel does not detect authentication settings and asks us to configure them. - No errors appear in the console (neither in frontend nor backend). - No 4xx or 5xx error codes appear in network requests. - Backend and database are running correctly. - We followed the documentation recommendation of having a separate URL for the admin panel (VITE_ADMIN_URL=https://admin.hopp.example.com) instead of serving it from the same frontend domain. 🛠 Current Configuration Our .env file contains: ` # ------------------------------------------------------------------------------ # Database & JWT Configuration # ------------------------------------------------------------------------------ DATABASE_URL=postgresql://postgres:OFUSCATED@hoppscotch-db:5432/hoppscotch?connect_timeout=300 JWT_SECRET=OFUSCATED SESSION_SECRET=OFUSCATED ALLOW_SECURE_COOKIES=true DATA_ENCRYPTION_KEY=OFUSCATED # ------------------------------------------------------------------------------ # Token Configuration # ------------------------------------------------------------------------------ TOKEN_SALT_COMPLEXITY=10 MAGIC_LINK_TOKEN_VALIDITY=3 REFRESH_TOKEN_VALIDITY=604800000 ACCESS_TOKEN_VALIDITY=86400000 # ------------------------------------------------------------------------------ # Hoppscotch Configuration # ------------------------------------------------------------------------------ REDIRECT_URL=https://hupp.example.com ENABLE_SUBPATH_BASED_ACCESS=false # Base and Backend URLs VITE_BASE_URL=https://hupp.example.com VITE_SHORTCODE_BASE_URL=https://hupp.example.com VITE_ADMIN_URL=https://admin.hupp.example.com VITE_BACKEND_GQL_URL=https://hupp.example.com/graphql VITE_BACKEND_WS_URL=wss://hupp.example.com/graphql VITE_BACKEND_API_URL=https://hupp.example.com/v1 VITE_ALLOWED_AUTH_PROVIDERS=EMAIL,GOOGLE # ------------------------------------------------------------------------------ # Google Auth Configuration # ------------------------------------------------------------------------------ GOOGLE_CLIENT_ID=OFUSCATED GOOGLE_CLIENT_SECRET=OFUSCATED GOOGLE_REDIRECT_URL=https://hupp.example.com/auth/callback/google GOOGLE_SCOPE=email,profile # ------------------------------------------------------------------------------ # SMTP Configuration # ------------------------------------------------------------------------------ MAILER_SMTP_ENABLE=true MAILER_USE_CUSTOM_CONFIGS=true MAILER_ADDRESS_FROM=OFUSCATED # SMTP Individual Configuration MAILER_SMTP_HOST=OFUSCATED MAILER_SMTP_PORT=465 MAILER_SMTP_SECURE=true MAILER_SMTP_USER=OFUSCATED MAILER_SMTP_PASSWORD=OFUSCATED MAILER_TLS_REJECT_UNAUTHORIZED=true # Additional Email Variables EMAIL_HOST=OFUSCATED EMAIL_PORT=465 EMAIL_USE_TLS=False EMAIL_USE_SSL=True EMAIL_HOST_USER=OFUSCATED EMAIL_HOST_PASSWORD=OFUSCATED DEFAULT_FROM_EMAIL=OFUSCATED # ------------------------------------------------------------------------------ # Rate Limiting # ------------------------------------------------------------------------------ RATE_LIMIT_TTL=60 RATE_LIMIT_MAX=100 WHITELISTED_ORIGINS=https://hupp.example.com,https://admin.hupp.example.com ` Our docker-compose.yml configuration: ` services: hoppscotch-frontend: image: hoppscotch/hoppscotch-frontend container_name: hoppscotch-frontend env_file: - .env ports: - "127.0.0.1:3000:3000" restart: unless-stopped depends_on: - hoppscotch-backend hoppscotch-backend: image: hoppscotch/hoppscotch-backend container_name: hoppscotch-backend env_file: - .env ports: - "127.0.0.1:3100:3100" restart: unless-stopped depends_on: - hoppscotch-db environment: - PORT=3100 hoppscotch-admin: image: hoppscotch/hoppscotch-admin container_name: hoppscotch-admin env_file: - .env ports: - "127.0.0.1:8080:3100" restart: unless-stopped depends_on: - hoppscotch-backend hoppscotch-db: image: postgres:16 container_name: hoppscotch-db environment: POSTGRES_DB: hoppscotch POSTGRES_USER: postgres POSTGRES_PASSWORD: OFUSCATED volumes: - hoppscotch_data:/var/lib/postgresql/data expose: - "5432" restart: unless-stopped volumes: hoppscotch_data: ` and this is my nginx.conf: for the site ` server { listen 80; server_name admin.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name admin.example.com; ssl_certificate /etc/letsencrypt/live/admin.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/admin.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; set $allowed_origin "*"; if ($http_origin ~* "^https?://(frontend\.example\.com|admin\.example\.com)$") { set $allowed_origin $http_origin; } location / { add_header 'Access-Control-Allow-Origin' "$allowed_origin" always; add_header 'Access-Control-Allow-Credentials' 'true' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since,content-type' always; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000 always; add_header 'Content-Type' 'text/plain charset=UTF-8' always; add_header 'Content-Length' 0 always; return 204; } proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ` 🛑 Debugging Logs Hoppscotch Admin Logs (docker compose logs hoppscotch-admin) ` WARN[0000] /home/hoppscotch-aio-proxy/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6464105,"msg":"using config from file","file":"/etc/caddy/sh-admin-multiport-setup.Caddyfile"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6479352,"msg":"adapted config to JSON","adapter":"caddyfile"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6479495,"msg":"Caddyfile input is not formatted; run 'caddy fmt --overwrite' to fix inconsistencies","adapter":"caddyfile","file":"/etc/caddy/sh-admin-multiport-setup.Caddyfile","line":2} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6501977,"logger":"admin","msg":"admin endpoint disabled"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6507666,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc000507100"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6509018,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv1","http_port":80} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6523373,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":3100"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6523476,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":3100"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.652352,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.652854,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":80"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"warn","ts":1737751249.6528647,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":80"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6528687,"logger":"http.log","msg":"server running","name":"srv1","protocols":["h1","h2","h3"]} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6528783,"msg":"serving initial configuration"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.6577804,"logger":"tls","msg":"cleaning storage unit","storage":"FileStorage:/data/caddy"} hoppscotch-admin | App/Admin Dashboard Caddy | {"level":"info","ts":1737751249.663546,"logger":"tls","msg":"finished cleaning storage units"} ` Hoppscotch Backend Logs (docker compose logs hoppscotch-backend) ` hoppscotch-backend | Backend Server | Fri, 24 Jan 2025 20:40:51 GMT express-session deprecated undefined resave option; provide resave option at dist/main.js:41:13 hoppscotch-backend | Backend Server | Fri, 24 Jan 2025 20:40:51 GMT express-session deprecated undefined saveUninitialized option; provide saveUninitialized option at dist/main.js:41:13 hoppscotch-backend | Backend Server | Enabling CORS with production settings hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RoutesResolver] AppController {/ping}: +40ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/ping, GET} route +4ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RoutesResolver] AuthController {/auth} (version: 1): +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/providers, GET} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/signin, POST} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/verify, POST} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/refresh, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/google, GET} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/google/callback, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/github, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/github/callback, GET} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/microsoft, GET} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/microsoft/callback, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/logout, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/auth/verify/admin, GET} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RoutesResolver] SiteController {/site} (version: 1): +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/site/setup, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/site/setup, PUT} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RoutesResolver] TeamCollectionController {/team-collection} (version: 1): +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/team-collection/search/:teamID, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RoutesResolver] HealthController {/health}: +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/health, GET} route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RoutesResolver] AccessTokenController {/access-tokens} (version: 1): +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/access-tokens/create, POST} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/access-tokens/revoke, DELETE} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/access-tokens/list, GET} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/access-tokens/collection/:id, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/access-tokens/environment/:id, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RoutesResolver] InfraTokensController {/infra} (version: 1): +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/user-invitations, POST} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/user-invitations, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/user-invitations, DELETE} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/users, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/users/:uid, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/users/:uid, PATCH} (version: 1) route +1ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/users/:uid, DELETE} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/users/:uid/admin-status, PATCH} (version: 1) route +0ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:51 PM LOG [RouterExplorer] Mapped {/infra/users/:uid/workspaces, GET} (version: 1) route +0ms hoppscotch-backend | Backend Server | Initialize PubSub hoppscotch-backend | Backend Server | GOOGLE SSO auth provider(s) are not configured properly in .env file. Do configure them from Admin Dashboard. hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:52 PM LOG [GraphQLModule] Mapped {/graphql, POST} route +619ms hoppscotch-backend | Backend Server | [Nest] 19 - 01/24/2025, 8:40:52 PM LOG [NestApplication] Nest application successfully started +11ms hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 17 hoppscotch-backend | Backend Server | Query Complexity: 3 hoppscotch-backend | Backend Server | Query Complexity: 4 hoppscotch-backend | Backend Server | Query Complexity: 3 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 4 hoppscotch-backend | Backend Server | Query Complexity: 17 hoppscotch-backend | Backend Server | Query Complexity: 3 hoppscotch-backend | Backend Server | Query Complexity: 3 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 hoppscotch-backend | Backend Server | Query Complexity: 7 ` ❓ Questions 1. Are there any additional steps required for the admin panel to recognize authentication settings? 2. Could there be a caching issue preventing the admin panel from reading the .env values? 3. Is there a specific backend verification that we should check? ### Steps to reproduce Deploy Hoppscotch Community Edition using docker-compose, ensuring that the .env file is properly configured with authentication settings (VITE_ALLOWED_AUTH_PROVIDERS=EMAIL,GOOGLE). Follow the official recommendation to host the admin panel on a separate URL (e.g., VITE_ADMIN_URL=https://admin.hupp.example.com). Start the services using: docker-compose up -d Access the frontend (https://hupp.example.com) and verify that it loads without issues. Try accessing the admin panel (https://admin.hupp.example.com). Observe that the admin panel asks to set up an authentication method, even though authentication is already configured in .env. ### Environment Production ### Version Cloud
kerem 2026-03-16 21:36:54 +03:00
Author
Owner

@jianzhichu commented on GitHub (Mar 4, 2025):

I'm in the same situation as you, have you solved it yet

<!-- gh-comment-id:2696309996 --> @jianzhichu commented on GitHub (Mar 4, 2025): I'm in the same situation as you, have you solved it yet
Author
Owner

@floviolleau commented on GitHub (Oct 1, 2025):

Hi,

I have the same issue today. Here is my docker-compose.yml file:

services:
  hoppscotch-postgres:
    image: postgres:15-alpine
    container_name: hoppscotch-postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: hoppscotch
      POSTGRES_PASSWORD: hoppscotch
      POSTGRES_DB: hoppscotch
    volumes:
      - hoppscotch-pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'",
        ]
      interval: 5s
      timeout: 5s
      retries: 10

  hoppscotch-aio:
    image: hoppscotch/hoppscotch
    container_name: hoppscotch-aio
    env_file:
      - ./.env
    ports:
      - "3300:3000"
      - "3100:3100"
      - "3170:3170"
      - "3200:3200"
      - "3080:80"
    restart: unless-stopped
    depends_on:
      hoppscotch-postgres:
        condition: service_healthy

  hoppscotch-migrate:
    image: hoppscotch/hoppscotch
    env_file:
      - ./.env
    depends_on:
      hoppscotch-postgres:
        condition: service_healthy
    command: sh -c "pnpx prisma migrate deploy"

volumes:
  hoppscotch-pgdata:

If I do docker exec -it hoppscotch-aio bash and inside the container I do env I see all variables from .env

Any clues?

Thanks

<!-- gh-comment-id:3356954852 --> @floviolleau commented on GitHub (Oct 1, 2025): Hi, I have the same issue today. Here is my docker-compose.yml file: ```yml services: hoppscotch-postgres: image: postgres:15-alpine container_name: hoppscotch-postgres restart: unless-stopped environment: POSTGRES_USER: hoppscotch POSTGRES_PASSWORD: hoppscotch POSTGRES_DB: hoppscotch volumes: - hoppscotch-pgdata:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: [ "CMD-SHELL", "sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'", ] interval: 5s timeout: 5s retries: 10 hoppscotch-aio: image: hoppscotch/hoppscotch container_name: hoppscotch-aio env_file: - ./.env ports: - "3300:3000" - "3100:3100" - "3170:3170" - "3200:3200" - "3080:80" restart: unless-stopped depends_on: hoppscotch-postgres: condition: service_healthy hoppscotch-migrate: image: hoppscotch/hoppscotch env_file: - ./.env depends_on: hoppscotch-postgres: condition: service_healthy command: sh -c "pnpx prisma migrate deploy" volumes: hoppscotch-pgdata: ``` If I do `docker exec -it hoppscotch-aio bash` and inside the container I do `env` I see all variables from .env Any clues? Thanks
Author
Owner

@mirarifhasan commented on GitHub (Oct 6, 2025):

@Palaos1510
I noticed a couple of configuration issues in your setup:

VITE_BACKEND_GQL_URL=https://hupp.example.com/graphql
VITE_BACKEND_WS_URL=wss://hupp.example.com/graphql
VITE_BACKEND_API_URL=https://hupp.example.com/v1

It appears the frontend URL is being used instead of the backend base URL.
I'd recommend trying our latest version of Hoppscotch, which features a more streamlined .env configuration with fewer variables for easier setup.


@jianzhichu @floviolleau
Could you please provide additional details about your setup? Specifically:

  1. Which version of Hoppscotch you're using
  2. Screenshots demonstrating the issue (if possible)

This will help us better understand and resolve the problem. Thank you!

<!-- gh-comment-id:3370894521 --> @mirarifhasan commented on GitHub (Oct 6, 2025): @Palaos1510 I noticed a couple of configuration issues in your setup: ``` VITE_BACKEND_GQL_URL=https://hupp.example.com/graphql VITE_BACKEND_WS_URL=wss://hupp.example.com/graphql VITE_BACKEND_API_URL=https://hupp.example.com/v1 ``` It appears the frontend URL is being used instead of the backend base URL. I'd recommend trying our latest version of Hoppscotch, which features a more streamlined .env configuration with fewer variables for easier setup. --- @jianzhichu @floviolleau Could you please provide additional details about your setup? Specifically: 1. Which version of Hoppscotch you're using 2. Screenshots demonstrating the issue (if possible) This will help us better understand and resolve the problem. Thank you!
Author
Owner

@mirarifhasan commented on GitHub (Oct 15, 2025):

Closing this issue due to inactivity. Please feel free to reopen it if the problem persists or you need further assistance.

<!-- gh-comment-id:3407370240 --> @mirarifhasan commented on GitHub (Oct 15, 2025): Closing this issue due to inactivity. Please feel free to reopen it if the problem persists or you need further assistance.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/hoppscotch#1750
No description provided.