Why Better-Auth?
Better-Auth was chosen for ShipFree because it provides:- Type-safe - Full TypeScript support with excellent IntelliSense
- Framework-agnostic - Works with any backend, easily integrated with Next.js
- Plugin system - Extensible architecture for adding features
- Database flexibility - Supports multiple databases via Drizzle ORM
- Modern authentication - Built-in support for passwordless, OAuth, and more
Authentication Methods
Email & Password
Traditional authentication with optional email verification
OAuth Providers
Google, GitHub, Microsoft, and Facebook sign-in
Email OTP
Passwordless authentication via one-time codes
Magic Links
Secure sign-in links sent to email
Configuration
The authentication system is configured insrc/lib/auth/auth.ts:
src/lib/auth/auth.ts
OAuth Providers
Configure OAuth providers via environment variables:- Google
- GitHub
- Microsoft
- Facebook
.env
Client-Side Usage
Authentication Client
The auth client is configured insrc/lib/auth/auth-client.ts:
src/lib/auth/auth-client.ts
Using in React Components
- Email/Password Sign In
- OAuth Sign In
- Email OTP
- Get Session
Server-Side Usage
Access authentication in Server Components and API routes:- Server Component
- API Route
- Server Action
src/app/(main)/dashboard/page.tsx
Database Schema
Better-Auth uses these tables (defined insrc/database/schema.ts):
View Database Schema
View Database Schema
src/database/schema.ts
Session Management
1
Session Creation
When a user signs in, Better-Auth creates a session with a secure token stored in a cookie.
2
Cookie Cache
Session data is cached in the cookie for 24 hours to reduce database queries.
3
Auto Refresh
Sessions are automatically refreshed every 24 hours if the user is active.
4
Expiration
Sessions expire after 30 days of inactivity and require re-authentication.
Session Configuration
src/lib/auth/auth.ts
Email Verification
Email verification can be enabled/disabled via the
EMAIL_VERIFICATION_ENABLED feature flag in src/config/feature-flags.ts.src/lib/auth/auth.ts
Organization Support
Better-Auth includes built-in organization/team support:src/lib/auth/auth.ts
Security Best Practices
Secure Cookies
Sessions are stored in HTTP-only, secure cookies in production
CSRF Protection
Built-in CSRF protection for all authentication requests
Rate Limiting
Consider adding rate limiting to prevent brute-force attacks
Password Hashing
Passwords are hashed using bcrypt before storage
Further Reading
Better-Auth Docs
Official Better-Auth documentation
Plugin System
Learn about available plugins
OAuth Providers
Configure additional OAuth providers
Custom Fields
Add custom fields to user schema