BetterAuth

28. March, 2025 3 min read Develop

Introducing BetterAuth

Authentication is a cornerstone of web application security, yet implementing it correctly and efficiently remains a challenge. BetterAuth aims to address this by providing a robust, extensible, and developer-friendly authentication framework built with TypeScript.

BetterAuth offers a suite of features out-of-the-box, including:

  • Multi-Factor Authentication (MFA): Enhance security by requiring additional verification steps.
  • Passwordless Authentication: Allow users to authenticate without traditional passwords.
  • Social Login Integrations: Support for providers like Google and GitHub.
  • Role-Based Access Control (RBAC): Fine-grained permission management.
  • Multi-Tenancy Support: Manage multiple tenants within a single application instance.

Its plugin architecture and framework-agnostic design make it adaptable to various project requirements.

Getting Started with BetterAuth

To integrate BetterAuth into your application:

Install the Package:

npm install better-auth

Configure BetterAuth:

// auth.ts
import { betterAuth } from 'better-auth';
import { prismaAdapter } from 'better-auth/adapters/prisma';
import prisma from './db';

export const auth = betterAuth({
  database: prismaAdapter(prisma, { provider: 'postgresql' }),
  emailAndPassword: { enabled: true },
  socialProviders: {
    github: {
      clientId: process.env.GITHUB_CLIENT_ID,
      clientSecret: process.env.GITHUB_CLIENT_SECRET,
    },
  },
  trustedOrigins: ['http://localhost:3000'],
});

Set Environment Variables:

Create a .env file with the following:

BETTER_AUTH_SECRET=your-secret-key
BETTER_AUTH_URL=http://localhost:3000

Initialize in Your Application:

// server.ts
import { auth } from './auth';

app.use('/auth', auth.router);

This setup provides a ready-to-use authentication system with minimal configuration.

Testing Authentication Flows

BetterAuth supports comprehensive testing through its utilities:

Install Testing Utilities:

npm install @better-auth-kit/tests --save-dev

Write Tests:

// auth.test.ts
import { testAuth } from '@better-auth-kit/tests';
import { auth } from './auth';

test('User can register and login', async () => {
  const client = testAuth(auth);
  await client.register({
    email: 'user@example.com',
    password: 'securePass123',
  });
  const session = await client.login({
    email: 'user@example.com',
    password: 'securePass123',
  });

  expect(session).toBeDefined();
});

These tools ensure your authentication flows work as intended.

Integrating with AWS Cognito

To use AWS Cognito as an authentication provider:

Configure Cognito in AWS:

  • Create a User Pool.
  • Set up an App Client.
  • Note the Pool ID and Client ID.

Integrate with BetterAuth:

// auth.ts
import { betterAuth } from 'better-auth';
import { cognitoAdapter } from 'better-auth/adapters/cognito';

export const auth = betterAuth({
  database: cognitoAdapter({
    userPoolId: process.env.COGNITO_USER_POOL_ID,
    clientId: process.env.COGNITO_CLIENT_ID,
  }),
  // other configurations
});

Set Environment Variables:

COGNITO_USER_POOL_ID=your-user-pool-id
COGNITO_CLIENT_ID=your-client-id

This integration allows you to leverage AWS Cognito’s scalable user management features within BetterAuth.

Conclusion

BetterAuth streamlines the implementation of secure authentication and authorization in web applications. Its TypeScript-first approach, extensibility, and support for modern authentication methods make it a valuable tool for developers aiming to build secure and scalable applications.

‘Till next time!