next-stack-auth
v0.0.1
Published
Full stack authentication for NextJs.
Downloads
4
Maintainers
Readme
Next Stack Auth
Full stack authentication for NextJs.
Get started
To add Next Stack Auth
to your project.
pnpm install next-stack-auth
Setup 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>
);
}