NextAuth对接Discord认证遇OAUTH_CALLBACK_ERROR问题求助
解决NextAuth Discord认证的OAUTH_CALLBACK_ERROR问题
问题根源
你碰到的两个错误核心是Discord OAuth2响应类型和NextAuth DiscordProvider的配置不匹配:
- 没加
idToken: true时,自定义的authorizationURL可能触发了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
相关产品推荐
相关产品推荐

