Skip to main content
ShipFree uses Better-Auth as its authentication foundation, providing a flexible, type-safe authentication system with support for email/password, OAuth providers, magic links, and OTP verification.

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 in src/lib/auth/auth.ts:
src/lib/auth/auth.ts

OAuth Providers

Configure OAuth providers via environment variables:
.env

Client-Side Usage

Authentication Client

The auth client is configured in src/lib/auth/auth-client.ts:
src/lib/auth/auth-client.ts

Using in React Components

Server-Side Usage

Access authentication in Server Components and API routes:
src/app/(main)/dashboard/page.tsx

Database Schema

Better-Auth uses these tables (defined in src/database/schema.ts):
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.
When enabled, users must verify their email before accessing the application:
src/lib/auth/auth.ts

Organization Support

Better-Auth includes built-in organization/team support:
src/lib/auth/auth.ts
You can restrict organization creation based on subscription plan by implementing the allowUserToCreateOrganization callback.

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