roosterwijs/.env.example
Ramon 1865de948e
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
Fix redirect-lus achter TLS-proxy (v0.2.02 beta)
Inloggen mislukte met DJANGO_SECURE=1 achter een reverse proxy die TLS
afhandelt, terwijl het inlogscherm zelf wel laadde.

- nginx.conf gaf `X-Forwarded-Proto $scheme` door. Achter een TLS-proxy
  komt het verzoek als http binnen, dus overschreef nginx de `https` van
  de proxy met `http`. Django zag de verbinding daardoor als onveilig en
  stuurde elk verzoek naar /api en /admin door naar https, waarna de
  proxy het weer als http aanleverde: een oneindige redirect-lus.
- nginx neemt nu de X-Forwarded-Proto van de proxy over via een map, en
  valt alleen terug op $scheme als die header ontbreekt. Werkt daardoor
  zowel achter een externe proxy als bij TLS op nginx zelf.
- .env.example: voorbeelden voor CSRF-origin en frontend-URL op https
  gezet, DJANGO_SECURE standaard op 1, met uitleg waarom een http-origin
  het inloggen met een CSRF-fout laat stranden.
- DEPLOY.md: checklist "Draaien achter TLS" toegevoegd met de drie
  vereisten (proxy-header, CSRF-origin, allowed hosts), commando's om te
  controleren of de header aankomt, en het advies poort 8080 aan de
  loopback te binden zodat de app niet buiten TLS om bereikbaar is.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FAQ4Np13v8fwbTtKHKnwDz
2026-08-13 21:41:47 +02:00

48 lines
2.2 KiB
Text

# Kopieer dit bestand naar .env en vul echte waarden in.
# cp .env.example .env
# Het .env-bestand bevat geheimen en hoort NIET in git (staat in .gitignore).
# --- Django ---------------------------------------------------------------
# Genereer een sterke sleutel, bv.:
# python -c "import secrets; print(secrets.token_urlsafe(50))"
DJANGO_SECRET_KEY=vervang-mij-door-een-lange-willekeurige-string
# 0 = uit (zo hoort het op de test-/productieserver). 1 alleen lokaal debuggen.
DJANGO_DEBUG=0
# Hostnaam(en) waarop de server bereikbaar is, komma-gescheiden.
# Vervang door de echte naam/IP van je test-server.
DJANGO_ALLOWED_HOSTS=rooster-test.example.nl,localhost,127.0.0.1
# Volledige origin(s) inclusief http(s):// voor CSRF achter nginx.
# LET OP: dit moet exact de origin zijn die de browser gebruikt. Draai je met
# TLS, dan hoort hier https:// te staan (en zonder poort als je op 443 zit).
# Staat hier http:// terwijl de browser https:// gebruikt, dan mislukt elke
# POST — dus ook het inloggen — met een CSRF-fout.
DJANGO_CSRF_TRUSTED_ORIGINS=https://rooster.example.nl
# Zet op 1 zodra de server achter HTTPS draait (TLS-certificaat aanwezig).
# Activeert o.a. veilige cookies, HSTS en een redirect naar https.
# Vereist dat de reverse proxy X-Forwarded-Proto: https meestuurt; nginx.conf
# in dit project geeft die header door.
DJANGO_SECURE=1
# --- PostgreSQL -----------------------------------------------------------
POSTGRES_DB=rooster
POSTGRES_USER=rooster
POSTGRES_PASSWORD=vervang-mij-door-een-sterk-wachtwoord
# --- E-mail (o.a. wachtwoordreset) ---------------------------------------
# Laat DJANGO_EMAIL_BACKEND leeg/weg om e-mail naar de console-log te sturen
# (handig om te testen). Zet onderstaande regel aan voor échte e-mail via SMTP:
# DJANGO_EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=
EMAIL_PORT=587
EMAIL_HOST_USER=
EMAIL_HOST_PASSWORD=
EMAIL_USE_TLS=1
DEFAULT_FROM_EMAIL=Roosterwijs <noreply@jouwschool.nl>
# Basis-URL van de frontend voor resetlinks in e-mails (zonder slash op het eind),
# bv. https://rooster.example.nl (leeg = afleiden uit het verzoek).
# Met TLS: gebruik https://, anders wijzen resetlinks naar een http-adres.
FRONTEND_BASE_URL=