如何在Next.js中间件调用Auth0 getSession()或其他方式获取用户信息?
报错根因
@auth0/nextjs-auth0 默认导出的getSession方法仅适配传统Node.js运行时,仅能在Node.js环境的API路由、getServerSideProps等场景下调用。Next.js中间件运行在Edge Runtime,导入时默认加载了客户端侧的getSession实现,因此抛出「该方法仅能在服务端使用」的错误。
解决方法
方案1:使用Edge适配版本的接口
1.7.0及以上版本的@auth0/nextjs-auth0提供了Edge Runtime兼容的专属导出路径,直接替换导入语句即可正常使用:
import { getSession } from '@auth0/nextjs-auth0/edge' import { NextResponse } from 'next/server' export default async function middleware(req, ev) { const session = await getSession(req) console.log(session) return NextResponse.next() }
方案2:手动解析会话Cookie
如果无法升级SDK版本,可以手动解析Auth0的会话Cookie获取用户信息:
- Auth0默认将加密后的会话数据存储在
appSession前缀的Cookie中 - 在中间件内从请求头的Cookie字段取出对应值,完成签名验证后解码即可得到完整用户信息
注意事项
- Edge Runtime不支持全部Node.js原生API,不要在中间件内调用仅Node.js环境支持的SDK方法
- 手动解析Cookie时必须验证签名,避免伪造的会话数据被识别为合法身份
内容的提问来源于stack exchange,提问作者Terry O'Neill
相关产品推荐
相关产品推荐

