0.4.108 • Published 4 months ago

@api-buddy/nextauth v0.4.108

Weekly downloads
-
License
-
Repository
github
Last release
4 months ago

@api-buddy/nextauth

API Buddy integration for NextAuth.js (Auth.js) - A complete authentication solution for Next.js applications.

Features

  • Easy setup with a single command
  • TypeScript support out of the box
  • Built-in session management
  • Support for multiple authentication providers
  • Secure JWT and database session strategies
  • Middleware for protecting routes

Installation

# Using npm
npm install @api-buddy/nextauth next-auth

# Using yarn
yarn add @api-buddy/nextauth next-auth

# Using pnpm
pnpm add @api-buddy/nextauth next-auth

Quick Start

  1. Run the setup command:

    npx @api-buddy/nextauth

    This will:

    • Create the necessary API routes
    • Set up the authentication configuration
    • Install required dependencies
    • Configure environment variables
  2. Update your .env.local with your authentication providers' credentials:

    NEXTAUTH_SECRET=your-secret-here
    NEXTAUTH_URL=http://localhost:3000
    
    # Example: Google OAuth
    GOOGLE_CLIENT_ID=your-google-client-id
    GOOGLE_CLIENT_SECRET=your-google-client-secret
  3. Wrap your application with the NextAuthProvider in your root layout:

    // app/layout.tsx
    'use client';
    
    import { NextAuthProvider } from '@api-buddy/nextauth';
    
    export default function RootLayout({
      children,
    }: {
      children: React.ReactNode;
    }) {
      return (
        <html lang="en">
          <body>
            <NextAuthProvider>
              {children}
            </NextAuthProvider>
          </body>
        </html>
      );
    }

Usage

Protecting Pages

Use the useSession hook to check the authentication status:

'use client';

import { useSession } from '@api-buddy/nextauth';

export default function Profile() {
  const { data: session } = useSession();
  
  if (!session) {
    return <div>Please sign in to view this page</div>;
  }
  
  return (
    <div>
      <h1>Welcome, {session.user?.name}!</h1>
      <p>Email: {session.user?.email}</p>
    </div>
  );
}

Server Components

For server components, use the getServerSession function:

import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';

export default async function ProfilePage() {
  const session = await getServerSession(authOptions);
  
  if (!session) {
    return <div>Please sign in to view this page</div>;
  }
  
  return (
    <div>
      <h1>Welcome, {session.user?.name}!</h1>
      <p>Email: {session.user?.email}</p>
    </div>
  );
}

Middleware Protection

Protect routes using the built-in middleware:

// middleware.ts
export { default } from 'next-auth/middleware';

export const config = {
  // Protect all routes except auth and static files
  matcher: ['/((?!api|_next/static|_next/image|favicon.ico|auth|public).*)'],
};

Configuration

Customize the authentication by modifying the configuration in src/lib/auth.ts:

import { authConfig } from '@api-buddy/nextauth';

export const authOptions = {
  ...authConfig,
  providers: [
    // Add your authentication providers here
  ],
  callbacks: {
    // Customize session and JWT callbacks
  },
  // Other NextAuth.js configuration options
};

Available Hooks

useSession

Get the current session and status:

const { data: session, status } = useSession();

useRequiredSession

A hook that redirects to the sign-in page if the user is not authenticated:

const { session, status } = useRequiredSession();

License

MIT

0.4.108

4 months ago

0.0.9

4 months ago

0.0.8

4 months ago

0.0.5

4 months ago