如何解决如何在 next-auth 中保护多个 Next.js API 路由
我在 Next.js 中构建了一个简单的 API,并使用 next-auth 进行身份验证。
到目前为止,我必须在每个 API 路由中使用这样的东西:
const session = await getSession({ req });
if (session) {
... do something ...
} else {
... send back a 401 status
}
这似乎违背了 DRY 原则。有没有一种聪明的方法可以在一个地方对多条路由应用保护,比如 Laravel 路由组?
解决方法
创建一个获取会话的中间件,否则返回 401。
请参阅 api middleware 上的 NextJS 文档。
您还可以查看 github 存储库中的 their example。
做一个中间件!
如果您不使用 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')
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。