如何在下一次身份验证中保护多个Next.js API路由
我在Next.js中构建了一个简单的API,并使用Next auth进行身份验证 到目前为止,我必须在每个API路由中使用类似的内容:如何在下一次身份验证中保护多个Next.js API路由,next.js,next-auth,Next.js,Next Auth,我在Next.js中构建了一个简单的API,并使用Next auth进行身份验证 到目前为止,我必须在每个API路由中使用类似的内容: const session = await getSession({ req }); if (session) { ... do something ... } else { ... send back a 401 status } 这似乎违背了干燥原则。有没有一种聪明的方法可以将保护应用于一个地方的多个路由,例如Laravel
const session = await getSession({ req });
if (session) {
... do something ...
} else {
... send back a 401 status
}
这似乎违背了干燥原则。有没有一种聪明的方法可以将保护应用于一个地方的多个路由,例如Laravel路由组?创建一个中间件,以获取会话返回401 请参阅上的NextJS文档。
您也可以在github repo中查看。制作一个中间件 如果您不使用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')
}
}
把它移到helper/util/middleware函数中,在API路由中调用它怎么样?这很好,但据我所知,我必须在每个API路由中引用中间件。在纯express应用程序中,我可以一次性定义一个覆盖多条路线的中间件。例如,使用passport时,未经授权的请求甚至不会传递到路由。在NextJS中可以这样做吗?我认为您必须在NextJS中包装每个需要中间件的处理程序。如果我没记错的话,NextJS中的每个api处理程序都是作为一个无服务器函数完全隔离运行的。如果您需要更多的控制,请阅读NextJS。也许可以添加全局中间件。