Skip to main content

Overview

Concordia uses Better Auth for authentication. All endpoints are automatically generated and handled through /api/auth/[...all].

Base Endpoint

All authentication flows use the Better Auth SDK, which provides type-safe client methods.

Authentication Configuration

From /src/lib/auth/auth.ts:53-133:

Registration

Sign Up

Validation Rules

From /src/lib/auth/auth.ts:57-64:
  • Email: Required, valid email format
  • Password:
    • Minimum 10 characters
    • At least 1 uppercase letter
    • At least 1 lowercase letter
    • At least 1 digit
    • At least 1 special character
  • Username: Optional, alphanumeric with hyphens/underscores
  • Name: Optional

Post-Signup Actions

From /src/lib/auth/auth.ts:196-266, after successful signup:
  1. Profile created with derived username
  2. Wallet initialized (balance: 0.00 EUR)
  3. Default role assigned (citizen)
  4. Audit log entry created
  5. Verification email sent (if SMTP configured)

Response


Email Verification

Send Verification Email

Verify Email

Users receive a verification link via email:
The frontend calls:

Login

Sign In with Email/Password

Rate Limiting

From /src/lib/auth/auth.ts:372-389:
  • Max attempts: 5 failed logins per email
  • Window: 15 minutes
  • Error: "Too many login attempts" (HTTP 429)

Response

Audit Logging

From /src/lib/auth/auth.ts:290-306, successful logins are logged:
Failed logins also logged (login_failed).

Session Management

Get Current Session

Response

Session Configuration

From /src/lib/auth/auth.ts:93-103:
number
default:"604800"
Session lifetime (7 days in seconds)
number
default:"86400"
Session refresh interval (1 day)
Cookie cache duration (5 minutes)
number
default:"600"
Fresh session window (10 minutes)
number
default:"604800"
Maximum session lifetime (7 days)

Logout

Sign Out

From /src/lib/auth/auth.ts:338-346, Bearer tokens are invalidated on logout:

Password Reset

Request Password Reset

Email Sent

From /src/lib/auth/auth.ts:65-76, users receive an email with reset link:

Reset Password


Organization Authentication

Set Active Organization

From /src/lib/auth/auth.ts:319, this is mapped to:

List User Organizations

Response


Security Features

IP Tracking

From /src/lib/auth/auth.ts:16-23, IPs are extracted from:

Secure Cookies

From /src/lib/auth/auth.ts:179-183:

CSRF Protection

  • CSRF checks enabled by default
  • Trusted origins configured via BETTER_AUTH_URL

Error Responses

Common Errors

Example


API Overview

Rate limiting and authentication basics

Better Auth Docs

Official Better Auth documentation