```
feat(auth): make JWT token expiration configurable via environment variable- Add JWT_LIFETIME_SECONDS environment variable to configure token expiration - Set default expiration to3600 seconds (1 hour) for both API and client auth backends - Remove hardcoded expiration values in favor of environment-based configuration - Add documentation comments explaining the JWT strategy configuration feat(auth): make cookie domain configurable via environment variable - Add AUTH_TOKEN_COOKIE_DOMAIN environment variable to configure cookie domain - When not set or empty, cookie domain defaults to None allowing cross-domain usage - Add documentation explaining cookie expiration is handled by JWT strategy - Update default_transport to use environment-based cookie domainfeat(docker): add CORS_ALLOWED_ORIGINS environment variable - Add CORS_ALLOWED_ORIGINS environment variable with default value of '*' - Configure frontend to use NEXT_PUBLIC_BACKEND_API_URL environment variable - Set default backend API URL to http://localhost:8000 feat(docker): add restart policy to all services - Add restart: always policy to cognee, frontend, neo4j, chromadb, and postgres services - This ensures services automatically restart on failure or system reboot - Improves container reliability and uptime```
This commit is contained in:
parent
a0f25f4f50
commit
a7b114725a
4 changed files with 26 additions and 4 deletions
|
|
@ -1,12 +1,22 @@
|
||||||
import os
|
import os
|
||||||
from fastapi_users.authentication import CookieTransport
|
from fastapi_users.authentication import CookieTransport
|
||||||
|
|
||||||
|
# Get cookie domain from environment variable
|
||||||
|
# If not set or empty, use None to allow cookie to work on any domain
|
||||||
|
cookie_domain = os.getenv("AUTH_TOKEN_COOKIE_DOMAIN")
|
||||||
|
if cookie_domain == "":
|
||||||
|
cookie_domain = None
|
||||||
|
|
||||||
|
# Note: Cookie expiration is automatically set by FastAPI Users based on JWT Strategy's lifetime_seconds
|
||||||
|
# The JWT Strategy lifetime_seconds is configured in get_client_auth_backend.py
|
||||||
|
# and reads from JWT_LIFETIME_SECONDS environment variable
|
||||||
|
|
||||||
default_transport = CookieTransport(
|
default_transport = CookieTransport(
|
||||||
cookie_name=os.getenv("AUTH_TOKEN_COOKIE_NAME", "auth_token"),
|
cookie_name=os.getenv("AUTH_TOKEN_COOKIE_NAME", "auth_token"),
|
||||||
cookie_secure=False,
|
cookie_secure=False,
|
||||||
cookie_httponly=True,
|
cookie_httponly=True,
|
||||||
cookie_samesite="Lax",
|
cookie_samesite="Lax",
|
||||||
cookie_domain="localhost",
|
cookie_domain=cookie_domain, # None allows cookie to work on any domain
|
||||||
)
|
)
|
||||||
|
|
||||||
default_transport.name = "cookie"
|
default_transport.name = "cookie"
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,10 @@ def get_api_auth_backend():
|
||||||
|
|
||||||
def get_jwt_strategy() -> JWTStrategy[models.UP, models.ID]:
|
def get_jwt_strategy() -> JWTStrategy[models.UP, models.ID]:
|
||||||
secret = os.getenv("FASTAPI_USERS_JWT_SECRET", "super_secret")
|
secret = os.getenv("FASTAPI_USERS_JWT_SECRET", "super_secret")
|
||||||
|
# 使用环境变量配置过期时间,默认与 client_auth_backend 保持一致(3600秒)
|
||||||
|
lifetime_seconds = int(os.getenv("JWT_LIFETIME_SECONDS", "3600"))
|
||||||
|
|
||||||
return APIJWTStrategy(secret, lifetime_seconds=36000)
|
return APIJWTStrategy(secret, lifetime_seconds=lifetime_seconds)
|
||||||
|
|
||||||
auth_backend = AuthenticationBackend(
|
auth_backend = AuthenticationBackend(
|
||||||
name=transport.name,
|
name=transport.name,
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,10 @@ def get_client_auth_backend():
|
||||||
from .default.default_jwt_strategy import DefaultJWTStrategy
|
from .default.default_jwt_strategy import DefaultJWTStrategy
|
||||||
|
|
||||||
secret = os.getenv("FASTAPI_USERS_JWT_SECRET", "super_secret")
|
secret = os.getenv("FASTAPI_USERS_JWT_SECRET", "super_secret")
|
||||||
|
# 使用环境变量配置过期时间,默认 3600 秒(1小时)
|
||||||
|
lifetime_seconds = int(os.getenv("JWT_LIFETIME_SECONDS", "3600"))
|
||||||
|
|
||||||
return DefaultJWTStrategy(secret, lifetime_seconds=3600)
|
return DefaultJWTStrategy(secret, lifetime_seconds=lifetime_seconds)
|
||||||
|
|
||||||
auth_backend = AuthenticationBackend(
|
auth_backend = AuthenticationBackend(
|
||||||
name=transport.name,
|
name=transport.name,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
services:
|
services:
|
||||||
cognee:
|
cognee:
|
||||||
container_name: cognee
|
container_name: cognee
|
||||||
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- cognee-network
|
- cognee-network
|
||||||
build:
|
build:
|
||||||
|
|
@ -14,6 +15,7 @@ services:
|
||||||
- HOST=0.0.0.0
|
- HOST=0.0.0.0
|
||||||
- ENVIRONMENT=local
|
- ENVIRONMENT=local
|
||||||
- LOG_LEVEL=INFO
|
- LOG_LEVEL=INFO
|
||||||
|
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:-*}
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
# Allows the container to reach your local machine using "host.docker.internal" instead of "localhost"
|
# Allows the container to reach your local machine using "host.docker.internal" instead of "localhost"
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
@ -68,6 +70,9 @@ services:
|
||||||
# If you want to use Cognee with a UI environment you can integrate the Cognee MCP Server into Cursor / Claude Desktop / Visual Studio Code (through Cline/Roo)
|
# If you want to use Cognee with a UI environment you can integrate the Cognee MCP Server into Cursor / Claude Desktop / Visual Studio Code (through Cline/Roo)
|
||||||
frontend:
|
frontend:
|
||||||
container_name: frontend
|
container_name: frontend
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- NEXT_PUBLIC_BACKEND_API_URL=${NEXT_PUBLIC_BACKEND_API_URL:-http://localhost:8000}
|
||||||
profiles:
|
profiles:
|
||||||
- ui
|
- ui
|
||||||
build:
|
build:
|
||||||
|
|
@ -85,6 +90,7 @@ services:
|
||||||
neo4j:
|
neo4j:
|
||||||
image: neo4j:latest
|
image: neo4j:latest
|
||||||
container_name: neo4j
|
container_name: neo4j
|
||||||
|
restart: always
|
||||||
profiles:
|
profiles:
|
||||||
- neo4j
|
- neo4j
|
||||||
ports:
|
ports:
|
||||||
|
|
@ -99,6 +105,7 @@ services:
|
||||||
chromadb:
|
chromadb:
|
||||||
image: chromadb/chroma:0.6.3
|
image: chromadb/chroma:0.6.3
|
||||||
container_name: chromadb
|
container_name: chromadb
|
||||||
|
restart: always
|
||||||
profiles:
|
profiles:
|
||||||
- chromadb
|
- chromadb
|
||||||
environment:
|
environment:
|
||||||
|
|
@ -117,6 +124,7 @@ services:
|
||||||
postgres:
|
postgres:
|
||||||
image: pgvector/pgvector:pg17
|
image: pgvector/pgvector:pg17
|
||||||
container_name: postgres
|
container_name: postgres
|
||||||
|
restart: always
|
||||||
profiles:
|
profiles:
|
||||||
- postgres
|
- postgres
|
||||||
environment:
|
environment:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue