@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.