Как я могу защитить несколько маршрутов API Next.js в next-auth

Я создаю простой API в Next.js и использую next-auth для аутентификации.

Пока мне приходится использовать что-то подобное в каждом маршруте API:

        const session = await getSession({ req });
  if (session) {
    ... do something ...
  } else {
    ... send back a 401 status
  }

Похоже, это противоречит принципу DRY. Есть ли умный способ применить защиту к нескольким маршрутам в одном месте, например к группам маршрутов Laravel?

2 ответа

Сделайте промежуточное ПО!

Не обращайте внимания на ввод, если вы не используете TS

      import { NextApiRequest, NextApiResponse } from 'next/types'
import { getSession } from 'next-auth/client'

export const protect = async (
  req: NextApiRequest,
  res: NextApiResponse,
  next: any
) => {
  const session = await getSession({ req })
  if (session) {
    console.log(session)
    next()
  } else {
    res.status(401)
    throw new Error('Not authorized')
  }
}

Создайте промежуточное ПО, которое получает сеанс, в противном случае возвращает 401.

См. Документацию NextJS по промежуточному программному обеспечению api .
Вы также можете посмотреть их пример в репозитории на github.

Другие вопросы по тегам