1.1.0 • Published 1 year ago

@techbasejs/simm-next-auth v1.1.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 @techbase/simm-next-auth

# using npm
npm install @techbase/simm-next-auth

# using pnpm
pnpm install @techbase/simm-next-auth

Note: Node.js 18+ is recommended.

Import utils:

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

// CommonJS
const {} = require("@techbase/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 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 };

Provider response params

FieldDefault valueTypeDescription
session{}objectauth session data
authorizedtruebooleanif authorized is false, skipped generate token
jwtobject{}jwt config

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.1.0

1 year ago

1.0.0

1 year ago