@charles.orn
Реализация авторизации на стороне сервера в Next.js может быть достигнута с использованием нескольких подходов, в зависимости от требований вашего проекта. Один из наиболее популярных способов — использование библиотеки next-auth
. Вот краткое руководство, как реализовать серверную авторизацию с её помощью:
Установка
- Установите next-auth:
npm install next-auth
- Установите адаптеры или провайдеры, необходимые для вашей конфигурации (например, для работы с базой данных или OAuth-провайдерами).
Настройка
- Создайте файл [...nextauth].js в папке pages/api/auth. Это будет ваш основной файл для настройки next-auth.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// pages/api/auth/[...nextauth].js
import NextAuth from 'next-auth';
import Providers from 'next-auth/providers';
export default NextAuth({
providers: [
// Пример использования GitHub-провайдера
Providers.GitHub({
clientId: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET
}),
// Добавьте другие провайдеры по мере необходимости
],
// Настройки базы данных, если используется
database: process.env.DATABASE_URL,
callbacks: {
async session(session, user) {
// Добавьте дополнительные параметры в сессии, если нужно
session.user.id = user.id;
return session;
},
async jwt(token, user) {
// Настройка JWT токена
if (user) {
token.id = user.id;
}
return token;
}
},
// Другие опции, такие как страницы авторизации, настройки JWT и пр.
});
|
Настройка среды
- Настройте переменные окружения в вашем .env файле:
1
2
3
|
GITHUB_CLIENT_ID=ваш_клиент_id
GITHUB_CLIENT_SECRET=ваш_клиент_secret
DATABASE_URL=ваш_урл_базы_данных
|
Использование
- В компонентах или страницах вашего приложения используйте хук useSession для проверки аутентификации пользователя:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import { useSession, signIn, signOut } from 'next-auth/react';
function Component() {
const { data: session, status } = useSession();
if (status === "loading") {
return <p>Loading...</p>;
}
return (
<div>
{!session && (
<>
<p>Not logged in</p>
<button onClick={() => signIn()}>Sign in</button>
</>
)}
{session && (
<>
<p>Welcome, {session.user.name}!</p>
<button onClick={() => signOut()}>Sign out</button>
</>
)}
</div>
);
}
|
Дополнительно
- Для защиты серверных маршрутов (например, в API-роутах) вы можете использовать getSession из next-auth:
1
2
3
4
5
6
7
8
9
10
11
12
|
import { getSession } from 'next-auth/react';
export default async (req, res) => {
const session = await getSession({ req });
if (!session) {
res.status(401).json({ message: "Not authenticated" });
return;
}
// Ваш код
res.status(200).json({ message: "Authenticated" });
};
|
Следуя этим шагам, вы сможете настроить серверную авторизацию в Next.js с использованием next-auth
.