1.0.0 • Published 1 year ago

simple-next-auth v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Simple Next Auth

npm version npm downloads Codecov

Missing ECMAScript module utils for Node.js

Next auth for next@14

Usage

Install npm package:

# using yarn
yarn add simple-next-auth

# using npm
npm install simple-next-auth

# using pnpm
pnpm install simple-next-auth

Note: Node.js 18+ is recommended.

Import utils:

// ESM
import {} from "simple-next-auth";

// CommonJS
const {} = require("simple-next-auth");

Resolving ESM modules

Several utilities to make ESM resolution easier:

  • Respecting ECMAScript Resolver algorithm
  • Exposed from Node.js implementation
  • Windows paths normalized
  • Supporting custom extensions and /index resolution
  • Supporting custom conditions
  • Support resolving from multiple paths or urls

Setup

Setup middleware

import { NextResponse } from "next/server";
import { withAuth } from "simple-next-auth";

const auth = withAuth(
  function middleware(request) {
    const pathname = request.nextUrl.pathname
    if (pathname === "/") {
      return NextResponse.redirect(new URL("/login", request.url));
    }
    return NextResponse.next();
  }
);

export default auth;

// See "Matching Paths" below to learn more
export const config = {
  matcher: [
    // "/:path*",
    "/((?!api|login|_next/static|_next/image|favicon.ico).*)",
  ],
};

Setup provider

"use client";

import { SessionProvider } from "next-simple-auth/dist/react";

export default function App({ children }: { children: React.ReactNode }) {
  return <SessionProvider>{children}</SessionProvider>;
}

Setup auth api routes

Create file /api/...auth/route.ts

import { auth, Provider, AuthRequestType } from "simple-next-auth";
import { NextRequest } from "next/server";

const loginProvider = new Provider("credentials", {
  name: "login",
  handler: async (
    request: AuthRequestType<{
      email?: string;
      password?: string;
      enable_2fa?: boolean;
    }>,
  ) => {
    const body = await request.json();
    return {
      authorized: !body.enable_2fa,
      session: body,
      jwt: {},
    };
  },
});

const twoFactorProvider = new Provider("credentials", {
  name: "2fa",
  handler: async (request: AuthRequestType<{ name?: string }>, { session }) => {
    const body = await request.json();
    return {
      session: session,
      jwt: {
        // Jwt options
      }
    };
  },
});

const h = auth({
  providers: [loginProvider, twoFactorProvider],
});

export { h as GET, h as POST };

Usage

signIn

import { signIn } from "next-simple-auth/dist/react";

signIn('login', {
  email: 'EMAIL',
  password: 'PASSWORD',
})

signOut

import { signOut } from "next-simple-auth/dist/react";

signout()

Use and update session

import { useSession } from "next-simple-auth/dist/react";

export default function Login() {
    const { user, update } = useSession()
   
    return <div>
        {{ user.email }}
    </div>
}

License

MIT - Made with 💛

1.0.0

1 year ago

1.7.1

1 year ago