npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

next-auth-static

v2.0.6

Published

next js authentication solution for static sites

Downloads

141

Readme

Next Auth Static

Next.js Static Auth is a comprehensive TypeScript library for managing authentication and authorization in Next.js static exported projects

  • can be used on the client side, anywhere

Features

  • User Authentication: Implement secure user sign-in and sign-out functionality.
  • Token Management: Securely handle JWT tokens for authentication.
  • Session Handling: Manage user sessions
  • Static Site Integration: Seamlessly works with Next.js static site generation.
  • Disable Devtools Hook:A simple hook for disabling DevTools in the application.

Installation

npm install next-auth-static

Usage

In layout.tsx

"use client";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
import { AuthConfig, AuthProvider } from "next-auth-static";
import AuthProviderComponent from "./authProvider";
const inter = Inter({ subsets: ["latin"] });

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode,
}>) {
  const authConfig: AuthConfig = {
    tokenType: "Bearer",
    tokenExpiry: 30,
    tokenExpiryUnit: "seconds",
    tokenKeys: {
      accessToken: "access_token",
    },
  };
  return (
    <html lang="en">
      <body className={inter.className}>
        <AuthProvider config={authConfig}>{children}</AuthProvider>;
      </body>
    </html>
  );
}

user sign in:

"use client";
import { useAuth } from "next-auth-static";
import React, { useState } from "react";

const LoginPage = () => {
  const { signIn } = useAuth();

  const handleLogin = async () => {
    try {
      const response = await fetch("example-login-endpoint", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ username, password }),
      });
      const data = await response.json();
      if (response.ok) {
        await signIn({
          accessToken: data.token,
          user: {
            name: "test",
            email: "test",
          },
        });
      } else {
        alert(`Login failed: ${data.message}`);
      }
    } catch (error) {
      console.error("Login error:", error);
      alert("An error occurred while trying to log in.");
    }
  };

  return (
    <div>
      <h1>Login</h1>
      <input
        type="text"
        placeholder="Username"
        value={username}
        onChange={(e) => setUsername(e.target.value)}
      />
      <input
        type="password"
        placeholder="Password"
        value={password}
        onChange={(e) => setPassword(e.target.value)}
      />
      <button onClick={handleLogin}>Login</button>
    </div>
  );
};

export default LoginPage;

signout:

const { signOut } = useAuth();

<button onClick={() => signOut().then(() => alert("Logged out"))}>
  logout
</button>;

get current sessions:

const { currentSession } = useAuth();

const { user = {} } = currentSession || {};
if (user) {
  console.log("user", user);
}

API

useAuth()

Returns an object with the following methods and properties:

signIn(accessToken: string, options?: SignInOptions): Promise

Signs in a user.

  • accessToken: The user's access token
  • options: Optional object containing additional sign-in data
    • user: Object containing user data

signOut(): Promise

Signs out the current user.

currentSession: { user?: User } | null

The current user session, if any.

License

MIT