You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NextAuth 5中如何获取Github OAuth回调URL的code查询参数?

解决方案

方法一:在NextAuth的callbacks.callback中获取code并发送给Django

NextAuth v5提供了callbacks.callback钩子,会在用户从Github回调到你的应用时触发,你可以在这里直接从请求URL中提取code参数,然后发送给Django接口。

  1. 打开你的NextAuth配置文件(通常是app/auth.ts或@/auth.ts)
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:52:52