Как я могу защитить несколько маршрутов 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.