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

NextAuth对接Discord认证遇OAUTH_CALLBACK_ERROR问题求助

解决NextAuth Discord认证的OAUTH_CALLBACK_ERROR问题

问题根源

你碰到的两个错误核心是Discord OAuth2响应类型和NextAuth DiscordProvider的配置不匹配:

  • 没加idToken: true时,自定义的authorization URL可能触发了OpenID Connect模式(返回id_token),但DiscordProvider默认用标准OAuth2授权码流,所以提示你改用OIDC模式的处理方法。
  • 加了idToken: true后,Provider开启OIDC验证,但默认没配置正确的issuer,导致验证iss字段时和预期值不符,触发报错。

具体解决办法

方案1:用DiscordProvider默认配置(推荐)

直接删掉自定义的authorization字段,DiscordProvider已经内置了正确的Discord OAuth2端点和权限范围配置:

import NextAuth from "next-auth/next";
import DiscordProvider from "next-auth/providers/discord";

export const AuthOptions = {
  providers: [
    DiscordProvider({
      clientId: process.env.DISCORD_CLIENT_ID,
      clientSecret: process.env.DISCORD_CLIENT_SECRET,
      // 移除自定义authorization,使用默认配置
    }),
  ],
};

const handler = NextAuth(AuthOptions);

export { handler as GET, handler as POST };

方案2:必须自定义authorization时的配置

如果需要自定义权限范围或其他参数,要确保不启用OpenID Connect模式,即明确指定response_type为code,不要包含id_token:

DiscordProvider({
  clientId: process.env.DISCORD_CLIENT_ID,
  clientSecret: process.env.DISCORD_CLIENT_SECRET,
  authorization: {
    url: "https://discord.com/oauth2/authorize",
    params: {
      scope: "identify email", // 按需添加权限,不要加openid
      response_type: "code", // 明确指定授权码流,避免返回id_token
    },
  },
})

为什么不能加idToken: true?

NextAuth的DiscordProvider默认不支持完整的OpenID Connect验证流程,强行开启idToken: true会触发OIDC的issuer验证,但默认没配置issuer: "https://discord.com",所以会出现unexpected iss value错误。Discord的OIDC支持有限,建议用默认的OAuth2模式更稳定。

内容的提问来源于stack exchange,提问作者mmd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:11:02