next-stack-auth
v0.0.1
Published
Full stack authentication for NextJs.
Maintainers
Readme
Next Stack Auth
Full stack authentication for NextJs.
Get started
To add Next Stack Auth to your project.
pnpm install next-stack-authSetup Your Project
Configure Backend
At the very beginning, create a backend server. Add a endpoint, that will return our authenticated user based on accessToken. On this path /auth/user.
export interface IUser {
id: string | number;
name: string;
img: string;
[key: string]: any;
}
axios.get<any, AxiosResponse<{ user: IUser }>>(
"https://my-server.com/auth/user", {
headers: { Authorization: `Bearer ${token}` },
}
);Add Envs
On your nextjs-app add this line of code NEXT_PUBLIC_AUTH_URL={AUTHENTICATED_USER_ENDPOIN} in .env.local
Add Auth State
// app/layout.tsx
import { ReactNode } from "react";
import { useAuthSSR } from "next-stack-auth";
import { AuthProvider } from "next-stack-auth/client";
export default async function RootLayout({
children,
}: {
children: ReactNode;
}) {
const auth = await useAuthSSR();
return (
<html lang="en">
<head />
<body>
<AuthProvider auth={auth}>{children}</AuthProvider>
</body>
</html>
);
}Examples
Authentication On Server Side
import { authOnSSR } from "next-stack-auth";
export default async function ProfilePage() {
await authOnSSR();
return <main>Profile</main>;
}Authentication On Client Side
For using next-stack-auth in client side use useAuth();
"use client";
import { useAuth } from "next-stack-auth/client";
export default function HomePage() {
const auth = useAuth();
return (
<main>
<h1>Home</h1>
<h3>{auth.user?.name}</h3>
<span>{auth.status}</span>
</main>
);
}Login On Client Side
"use client";
import { useAuth } from "next-stack-auth/cleint";
import axios from "axios";
export default function LoginPage() {
const auth = useAuth();
const login = async () => {
try {
const response = await axios.post("/api/auth/login", {});
await auth.login(response.data.accessToken);
} catch (error) {
console.log(error);
}
};
return (
<main>
<button onClick={login}>Login</button>
</main>
);
}Logout On Server Side
import { logoutOnSSR } from "next-stack-auth";
export default async function LogoutPage() {
await logoutOnSSR();
return <main>Logout</main>;
}Logout On Client Side
"use client";
import { useAuth } from "next-stack-auth/cleint";
export default function LogoutPage() {
const auth = useAuth();
const logout = () => {
auth.logout();
};
return (
<main>
<button onClick={logout}>Logout</button>
</main>
);
}