在NextAuth 5中如何获取Github OAuth回调URL的code查询参数?
解决方案
方法一:在NextAuth的callbacks.callback中获取code并发送给Django
NextAuth v5提供了callbacks.callback钩子,会在用户从Github回调到你的应用时触发,你可以在这里直接从请求URL中提取code参数,然后发送给Django接口。
- 打开你的NextAuth配置文件(通常是
app/auth.ts或@/auth.ts) - 在
NextAuth()配置中添加callbacks字段,实现callback函数:
import NextAuth from "next-auth"; import GitHub from "next-auth/providers/github"; export const { handlers, auth, signIn, signOut } = NextAuth({ providers: [ GitHub({ clientId: process.env.GITHUB_ID!, clientSecret: process.env.GITHUB_SECRET!, }), ], callbacks: { async callback({ request }) { // 从回调URL的查询参数中提取code const code = request.nextUrl.searchParams.get("code"); if (code) { // 发送code到Django REST Framework接口 try { await fetch("http://your-django-api-domain/your-endpoint", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ github_code: code }), }); } catch (error) { console.error("Failed to send code to Django:", error); // 可根据需求添加错误处理逻辑 } } // 继续NextAuth的默认流程,返回重定向目标(默认为首页) return request.nextUrl.searchParams.get("redirect") || "/"; }, }, });
为什么客户端用useSearchParams拿不到code?
当Github回调到/api/auth/callback/github时,这个请求是由NextAuth的服务端路由处理的,处理完成后会自动重定向到你指定的页面(比如首页),重定向后原URL中的code参数会被移除,所以客户端组件在重定向后的页面中用useSearchParams自然拿不到code。必须在服务端处理回调的阶段捕获这个参数。
注意事项
- 确保Django接口配置了正确的跨域策略(CORS),或者在Next.js中配置代理转发请求,避免跨域错误
code是一次性的敏感参数,仅在回调请求中存在,服务端发送更安全,避免在客户端暴露- 如果需要根据Django的返回结果调整NextAuth的登录流程,可以在
callback函数中处理响应,比如修改返回的重定向URL或用户信息
内容的提问来源于stack exchange,提问作者Jason Hall
相关产品推荐
相关产品推荐

