为什么下一个身份验证说需要 client_id,即使在不和谐的提供商中,显然有一个 client_id

问题描述 投票:0回答:8

当我尝试使用下一个身份验证创建不和谐的 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。为什么它仍然给我这个错误? 另外,在我的网站上,当我单击“使用不和谐登录”时,它显示“尝试使用其他帐户登录”。

oauth discord next.js next-auth
8个回答
2
投票

我不是专家,但您是否尝试过更改配置对象属性名称?
我相信他们应该是

camelCase
而不是
snake_case


✅   “clientId”
❌   “client_id”

DiscordProvider({
    clientId: process.env.DISCORD_CLIENT_ID,
    clientSecret: process.env.DISCORD_CLIENT_SECRET
})

1
投票

我昨天也遇到了同样的错误,这是因为我的 .env 文件有这样定义的 mi 变量:

FACEBOOK_CLIENT_ID=akakasjakandiaak

我将定义更改为这种样式,错误就消失了。

FACEBOOK_CLIENT_ID="akakasjakandiaak"

Dotenv 文档: https://www.npmjs.com/package/dotenv


1
投票

错误:实际上非常简单,您的客户端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 

0
投票

这已经很老了。但问题可能是该函数在客户端被调用,并且客户端中没有“process.env”。


0
投票

也许您的 .env.local 位置不正确。它应该在根目录中。


0
投票

2小时多后我发现我使用的是“:”而不是“=”

GOOGLE_CLIENT_ID:ghsttsy....... 而不是

GOOGLE_CLIENT_ID=ghsttsy.......


0
投票

检查 .env 文件的位置。我将控制台日志放在不同的位置,以查看我是否正在注销环境变量。结果我的 .env 文件位于错误的目录中(我的根文件夹中没有它)。


-1
投票

我遇到了同样的问题,但两天后我在 YouTube 上找到了解决方案

解决方案:
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 }; } }, })


© www.soinside.com 2019 - 2024. All rights reserved.