next-authen
v0.0.1
Published
Full stack authentication for NextJs.
Downloads
18
Maintainers
Readme
Next Authen
Full stack authentication for NextJs.
Get started
To add Next Authen to your project.
pnpm install next-authenSetup 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-authen";
import { AuthProvider } from "next-authen/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-authen";
export default async function ProfilePage() {
await authOnSSR();
return <main>Profile</main>;
}Authentication On Client Side
For using next-authen in client side use useAuth();
"use client";
import { useAuth } from "next-authen/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-authen/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-authen";
export default async function LogoutPage() {
await logoutOnSSR();
return <main>Logout</main>;
}Logout On Client Side
"use client";
import { useAuth } from "next-authen/cleint";
export default function LogoutPage() {
const auth = useAuth();
const logout = () => {
auth.logout();
};
return (
<main>
<button onClick={logout}>Logout</button>
</main>
);
}