当我尝试使用下一个身份验证创建不和谐的 oauth 客户端并单击登录时,出现此错误:
https://next-auth.js.org/errors#get_authorization_url_error client_id is required {
message: 'client_id is required',
stack: 'TypeError: client_id is required\n' +
' at new BaseClient (/Users/muyuan/Documents/minibot/node_modules/openid-client/lib/client.js:178:13)\n' +
' at new Client (/Users/muyuan/Documents/minibot/node_modules/openid-client/lib/client.js:1823:7)\n' +
' at openidClient (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/lib/oauth/client.js:28:18)\n' +
' at getAuthorizationUrl (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/lib/oauth/authorization-url.js:67:51)\n' +
' at Object.signin (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/routes/signin.js:37:60)\n' +
' at NextAuthHandler (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/index.js:191:39)\n' +
' at processTicksAndRejections (internal/process/task_queues.js:95:5)\n' +
' at async NextAuthNextHandler (/Users/muyuan/Documents/minibot/node_modules/next-auth/next/index.js:21:19)\n' +
' at async /Users/muyuan/Documents/minibot/node_modules/next-auth/next/index.js:57:32\n' +
' at async Object.apiResolver (/Users/muyuan/Documents/minibot/node_modules/next/dist/server/api-utils.js:101:9)',
name: 'TypeError'
}
[next-auth][error][SIGNIN_OAUTH_ERROR]
https://next-auth.js.org/errors#signin_oauth_error client_id is required {
error: {
message: 'client_id is required',
stack: 'TypeError: client_id is required\n' +
' at new BaseClient (/Users/muyuan/Documents/minibot/node_modules/openid-client/lib/client.js:178:13)\n' +
' at new Client (/Users/muyuan/Documents/minibot/node_modules/openid-client/lib/client.js:1823:7)\n' +
' at openidClient (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/lib/oauth/client.js:28:18)\n' +
' at getAuthorizationUrl (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/lib/oauth/authorization-url.js:67:51)\n' +
' at Object.signin (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/routes/signin.js:37:60)\n' +
' at NextAuthHandler (/Users/muyuan/Documents/minibot/node_modules/next-auth/core/index.js:191:39)\n' +
' at processTicksAndRejections (internal/process/task_queues.js:95:5)\n' +
' at async NextAuthNextHandler (/Users/muyuan/Documents/minibot/node_modules/next-auth/next/index.js:21:19)\n' +
' at async /Users/muyuan/Documents/minibot/node_modules/next-auth/next/index.js:57:32\n' +
' at async Object.apiResolver (/Users/muyuan/Documents/minibot/node_modules/next/dist/server/api-utils.js:101:9)',
name: 'TypeError'
},
provider: {
id: 'discord',
name: 'Discord',
type: 'oauth',
authorization: {
url: 'https://discord.com/api/oauth2/authorize',
params: [Object]
},
token: { url: 'https://discord.com/api/oauth2/token', params: {} },
userinfo: { url: 'https://discord.com/api/users/@me', params: {} },
profile: [Function: profile],
idToken: false,
checks: [ 'state' ],
client_id: my client id(not actually 'my client id'),
client_secret: my client secret(not actually 'my client secret'),
signinUrl: 'http://localhost:3000/api/auth/signin/discord',
callbackUrl: 'http://localhost:3000/api/auth/callback/discord'
},
message: 'client_id is required'
}
这就是我定义不和谐提供商的方式:
import NextAuth from "next-auth"
import DiscordProvider from "next-auth/providers/discord"
export default NextAuth({
// Configure one or more authentication providers
providers: [
DiscordProvider({
client_id: process.env.DISCORD_CLIENT_ID,
client_secret: process.env.DISCORD_CLIENT_SECRET
})
],
secret: "hello1234567890",
debug: true
})
明显有一个client_id。为什么它仍然给我这个错误? 另外,在我的网站上,当我单击“使用不和谐登录”时,它显示“尝试使用其他帐户登录”。
我不是专家,但您是否尝试过更改配置对象属性名称?
我相信他们应该是
camelCase
而不是snake_case
DiscordProvider({
clientId: process.env.DISCORD_CLIENT_ID,
clientSecret: process.env.DISCORD_CLIENT_SECRET
})
我昨天也遇到了同样的错误,这是因为我的 .env 文件有这样定义的 mi 变量:
FACEBOOK_CLIENT_ID=akakasjakandiaak
我将定义更改为这种样式,错误就消失了。
FACEBOOK_CLIENT_ID="akakasjakandiaak"
Dotenv 文档: https://www.npmjs.com/package/dotenv
错误:实际上非常简单,您的客户端ID丢失了(我的意思是真正的字符串ID而不是指向它的变量,即在您的情况下为“DISCORD_CLIENT_ID”)
解决方案:创建一个 .env 文件并将真实的客户端 id(来自 firebase)字符串放入其中,它很可能丢失,这是如果您在本地测试您的应用程序,如果托管在 vercel 或 netifly 上,请设置此字符串环境变量。
即您的 .env.local 文件应如下所示:
1 # Authentication
2 DISCORD_CLIENT_ID =
3 DISCORD_CLIENT_SECRET =
4 NEXTAUTH_URL = http://localhost:3000
5
6 FACEBOOK_ID =
7 FACEBOOK_SECRET =
8
这已经很老了。但问题可能是该函数在客户端被调用,并且客户端中没有“process.env”。
也许您的 .env.local 位置不正确。它应该在根目录中。
2小时多后我发现我使用的是“:”而不是“=”
GOOGLE_CLIENT_ID:ghsttsy....... 而不是
GOOGLE_CLIENT_ID=ghsttsy.......
检查 .env 文件的位置。我将控制台日志放在不同的位置,以查看我是否正在注销环境变量。结果我的 .env 文件位于错误的目录中(我的根文件夹中没有它)。
我遇到了同样的问题,但两天后我在 YouTube 上找到了解决方案
更改您的 linkedin 提供商
LinkedInProvider({
clientId: process.env.NEXT_PUBLIC_LINKEDIN_CLIENT_ID,
clientSecret: process.env.NEXT_PUBLIC_LINKEDIN_CLIENT_SECRET,
token: {
url: "https://www.linkedin.com/oauth/v2/accessToken",
async request({
client,
params,
checks,
provider
}) {
const response = await client.oauthCallback(provider.callbackUrl, params, checks, {
exchangeBody: {
client_id: process.env.NEXT_PUBLIC_LINKEDIN_CLIENT_ID,
client_secret: process.env.NEXT_PUBLIC_LINKEDIN_CLIENT_SECRET,
}
});
return {
tokens: response
};
}
},
})