From Error to Success: Troubleshooting New API Binding with NodeLoc

说明:此贴仅作日常记录,正常做法是按论坛指引,方便快捷!

**new-api 接入NodeLoc 登录教程**2026-6-21

一开始OAuth 集成设置如下

询问1

在vps部署new-api,主域名2026.net托管在cloudflare,子域名new-api.2026.net绑定VPS的IP,并开启小黄云,使用规则,端口回源,实现https访问,主域名2026.net的SSL/TLS设置为灵活;new-api域名网站为https://new-api.2026.net/

1、在论坛申请应用,获取Client ID、Client Secret

2、OAuth 集成OIDC默认设置 重定向 URL:new-api网站地址/oauth/oidc

OAuth集成绑定论坛的Client ID、Client Secret,保存设置后,

使用论坛的账号授权登录https://new-api.2026.net/sign-in,**点击毫无反应**,

浏览器F12 console显示***此处省略

访问 https://new-api.2026.net/**auth/oidc**

测试Error 1016

Ray ID: a2f0d305e99dde8d • 2026-08-22 09:24:24 UTC

Origin DNS error

网页版qwen3.7-plus 回复:

第一步:检查 Cloudflare DNS 记录

第二步:检查“端口回源”配置 (Origin Rules)

第三步:核对 SSL/TLS 模式与 VPS 服务的匹配

第四步:检查 VPS 防火墙与云服务商安全组

第五步:修正 OIDC 重定向 URL (预防后续问题)

1. **在 new-api 的系统设置中**:

OIDC 的重定向 URL (Redirect URI) 必须是**完整的绝对路径**

2. **在论坛的应用管理设置中**:

回调地址 (Callback URL / Redirect URI) 必须与 new-api 中填写的**完全一致**(包括 `https://` 和末尾是否有斜杠)。

前面三步,检查无问题;第四步主要检查端口是否开放,初步判断可忽略;

第五步 有可能出问题,但仔细核对new-api与论坛一致;

询问2:

直接访问:https://new-api.2026.net正常 只是点击登录时选择论坛登录,毫无反应,console也没数据传输

既然直接访问 `https://new-api.2026.net` 已经正常,说明 **Cloudflare 的 DNS、端口回源和 SSL/TLS 配置已经成功打通**,这是非常关键的一步!

现在的问题是:**点击“论坛登录”毫无反应,且 Network(网络)面板没有新的请求发出**。这通常意味着**前端 JavaScript 代码在执行点击事件时遇到了错误并静默失败**,或者**前端未能正确读取到 OIDC 的配置信息**(例如 Client ID 为空),导致无法拼接授权跳转链接。

第一步:排除浏览器缓存与插件干扰(最常见)

第二步:严格核对 OIDC 重定向 URL (Redirect URI)

第三步:检查 new-api 后端是否成功加载了 OIDC 配置

SSH执行命令

第四步:检查论坛端 OIDC 端点 URL 是否填写完整

小插曲:

new-api域名网站/system-settings/auth/basic-auth 设置 注册已启用 设置为关闭状态,而且重启new-api,但是打开new-api域名网站/sign-up还是显示可以注册

其实,只要注册会提示 管理员已关闭新用户注册!

## 1. 清除浏览器缓存并强制刷新

## 2. 检查数据库配置是否保存成功

登录 VPS,进入 new-api 数据库检查配置:SSH执行一些列命令

## 3. 检查环境变量是否覆盖了配置

查看 new-api 的 Docker 配置或 `.env` 文件 使用命令

## 4. 直接修改数据库禁用注册

## 5. 检查 new-api 日志

## 6. 检查是否有多个配置位置

## 临时解决方案:直接禁用注册页面访问

如果上述方法都无效,可以通过 Nginx 反向代理拦截注册页面

root@VPS:~# docker exec -it new-api-db mysql -u root -p

Error response from daemon: No such container: new-api-db

这是什么鬼,竟然找不到new-api-db!

经过qwen3.7-plus专家指导

再次执行命令

root@VPS:~# docker exec new-api find / -name “*.db” 2>/dev/null

/data/one-api.db root@VPS:~# docker exec new-api find / -name “*.db” 2>/dev/null

/data/one-api.db

怎么换了一个名称**one-api**.db???

又是一系列命令,

Qwen3.7-plus回复

太好了!从您的输出可以看到:

```text

PasswordRegisterEnabled|false

RegisterEnabled|false

```

这说明**数据库中的注册开关已经成功设置为 `false`(关闭状态)了!**

### 第一步:检查 Cloudflare 是否缓存了旧页面(最常见!)

### 第二步:全面排查数据库中隐藏的注册开关

### 第三步:确认容器实际读取的数据库文件路径

root@VPS:~# sqlite3 ./one-api.db “SELECT key, value FROM options WHERE lower(key) LIKE ‘%register%’;”

PasswordRegisterEnabled|false

RegisterEnabled|false

### 第一步:验证容器内部实际读取的数据库状态(最关键)

### 第二步:排查 Cloudflare 页面缓存(极高概率)

### 第三步:确认“可以注册”的具体表现形式

### 1. 关于“还能注册”的误会:其实已经成功关闭了!

请看您提供的数据中的这两行:

- `“register_enabled”: false`

- `“password_register_enabled”: false`

**结论**:后端的注册功能**已经 100% 成功关闭**!您的数据库修改完全生效了。

**为什么您还能看到页面?** 因为 New-API 的逻辑是:即使关闭了普通注册,如果开启了第三方登录(如 OIDC),`/sign-up` 页面依然会显示,但**上面只会显示“使用 Nodeloc 登录”的按钮**,而**不会**有输入用户名和密码的表单。您看到的其实是第三方授权入口,而不是传统的注册表单。

### 2. 核心问题:为什么点击“论坛登录”毫无反应?

请看您数据中的这几个关键配置:

```json

“oidc_enabled”: true,

“oidc_client_id”: “73ded2c5-********”,

“oidc_display_name”: “Nodeloc”,

“oidc_authorization_endpoint”: “” :backhand_index_pointing_left: 罪魁祸首在这里!

已按照要求修改, 点击使用论坛登录跳转到https://4gfj4hgkj4as4.pages.dev/oauth/authorize?client_id=73ded2c5-

测试折腾Well-Known URL无效

要手动找到 Nodeloc 论坛实际的 OAuth 端点

1. `HTTP/2 200` 说明这个 Well-Known URL **是真实存在且可访问的**!

2. `x-discourse-route: discourse_auth_provider/oauth/openid_configuration` 明确告诉我们:**Nodeloc 使用的是 Discourse 论坛程序**,并且配置了 OIDC 插件。

太棒了!这个 JSON 数据非常完美,它直接给出了所有正确的答案。这说明 **Nodeloc 论坛端的 OIDC 配置是完全正常的**。

第1次提到的授权端点 (Authorization Endpoint)、令牌端点 (Token Endpoint)、用户信息端点 (User Info Endpoint)、重定向 URL (Redirect URI)

root@VPS:~# curl -s https://4gfj4hgkj4as4.pages.dev/.well-known/openid-configuration

将以下从 JSON 中提取的**准确地址**,分别填入对应的字段中

找到很重要的问题

第一二步完全按照以上,浏览器无痕模式打开使用nodeloc论坛登录提示问题还是存在

谷歌浏览器无痕模式 F12 console GET https://4gfj4hgkj4as4.pages.dev/**[u]oauth/authorize[/u]**?client_id=73ded2c5-

请看控制台里的这行关键信息:

`GET https://4gfj4hgkj4as4.pages.dev/oauth/authorize?client_id=… 404 (Not Found)`

它说明 new-api **仍然**在尝试访问错误的地址 `/oauth/authorize`,而不是我们之前确认的、正确的地址 `/oauth-provider/authorize`(注意中间的 `-provider`)。

### :hammer_and_wrench: 强制修正数据库配置(请务必执行)执行命令

**问题出在这里**:数据库里实际存储的键名(Key)是**带点 `.`** 的(例如 `oidc.authorization_endpoint`),而我之前给您的 SQL 命令中使用的是**带下划线 `_`** 的(`oidc_authorization_endpoint`)。

又是一堆命令修复数据库***

:tada: **太棒了!数据库已经 100% 完美修正!**

从您的输出可以清晰地看到,三个端点现在都正确地指向了包含 `-provider` 的路径:

- `oidc.authorization_endpoint|https://4gfj4hgkj4as4.pages.dev/oauth-provider/authorize\`

- `oidc.token_endpoint|https://4gfj4hgkj4as4.pages.dev/oauth-provider/token\`

- `oidc.user_info_endpoint|https://4gfj4hgkj4as4.pages.dev/oauth-provider/userinfo\`

询问:使用nodeloc登录,提示 启动 OIDC 登录失败

429 (Too Many Requests)`

暂停5-10分钟后

论坛已在谷歌无痕模式下登录账号,访问https://new-api.****/sign-in使用nodeloc登录 还是显示OIDC 获取 Token 失败,请检查设置

分析日志

root@VPS:~# docker logs --tail 50 new-api

请看这行关键报错:

`[ERR] … | [OAuth-OIDC] ExchangeToken failed: empty access token`

root@VPS:~# curl -v -X POST “https://4gfj4hgkj4as4.pages.dev/oauth-provider/token” \

你提供的 `curl` 输出完美地证明了:**Nodeloc 论坛的 OIDC 配置 100% 正确!**

论坛成功返回了 `HTTP/2 200`,并且给了你完整的 `“access_token”` 和 `“id_token”`。这说明你的 `Client ID`、`Client Secret`、`Code` 和 `Redirect URI` **全部完美匹配**!

问题依旧存在,再次执行命令,更新数据库

这个日志确认了问题依然卡在 `[OAuth-OIDC] ExchangeToken failed: empty access token`。

这说明 new-api 确实向论坛发起了请求,但**没有收到包含 `access_token` 的有效 JSON 响应**。

### :magnifying_glass_tilted_left: 第一步:检查“环境变量”是否覆盖了数据库配置(极高概率!)

### :magnifying_glass_tilted_left: 第二步:检查 `redirect_uri` 是否被偷偷加了“致命斜杠”

### :magnifying_glass_tilted_left: 第三步:容器内真实请求测试(验证是否被 Cloudflare 拦截)

执行命令,找到server_address问题根源

root@VPS:~# # 1. 拷贝数据库

docker cp new-api:/data/one-api.db /tmp/check_uri.db

# 2. 查看回调地址和服务器地址配置

sqlite3 /tmp/check_uri.db “SELECT key, value FROM options WHERE key IN (‘oidc_redirect_uri’, ‘server_address’, ‘oidc_client_id’, ‘oidc_client_secret’);”

Successfully copied 967kB (transferred 968kB) to /tmp/check_uri.db

### ASSISTANT

看来 `sqlite3` 查询没有返回结果,这通常是因为键名(Key)不完全匹配。但这反而让我们发现了一个**极其可疑的线索**!

在之前您提供的 JSON 数据中,有一行非常关键:

`“server_address”: “http://localhost:3000”`

在 New-API 的逻辑中,如果 `server_address` 没有正确设置为您的真实域名,它在向论坛请求 Token 时,可能会自动拼接出一个错误的 `redirect_uri`(例如 `http://localhost:3000/oauth/oidc\`)。

而 Nodeloc 论坛后台配置的是 `https://new-api.2026.net/oauth/oidc\`。

**这两个地址不匹配,论坛就会直接拒绝请求**,导致 New-API 拿不到 Token,从而报 `empty access token`。

接着,又是一堆命令

询问:如果 server_address 是默认的 “http://localhost:3000” 如何查看或验证

又是检查数据库

这个查询依然没有返回结果,这非常关键!这说明 New-API 的数据库中**根本没有存储** `server_address` 或 `oidc_redirect_uri` 这类配置项,或者它们存储的位置/键名非常特殊。

# # 1. 查看数据库中有哪些表

sqlite3 /tmp/verify.db “.tables”

# 2. 查看 options 表的前 10 条数据(看看键名到底是什么格式)

sqlite3 /tmp/verify.db “SELECT key, value FROM options LIMIT 10;”

请看您提供的数据库输出结果。里面**根本没有** `oidc.authorization_endpoint`、`oidc.token_endpoint` 或 `oidc.redirect_uri` 这些键!

询问:主页 URL,网站地址 是无法修改的

### :hammer_and_wrench: 终极修复:通过数据库强制修改主页 URL

询问:服务器的公开URL,用于OAuth回调、Webhook和其他外部集成 如果这里修改了。open-webui 外部链接是否也需要修改

root@VPS:~# docker logs --tail 50 new-api

这个日志非常有趣!它透露了几个关键信息:

1. `20:18:01` 的 `PUT /api/option/` 返回了 `200`,说明您**成功保存了**“服务器地址”的修改!

2. `20:18:38` 的 `GET /oauth/oidc?code=…` 也返回了 `200`,说明 New-API **成功接收到了**从论坛跳回来的授权码(code)。

**但是,日志中并没有出现我们之前看到的 `empty access token` 报错,也没有明显的 `500` 或 `panic` 错误记录。**

这通常意味着两种可能:

1. **这个 “500 糟糕!出错了” 页面其实是 Nodeloc 论坛返回的**,而不是 New-API 返回的。

2. New-API 的前端在收到数据后,尝试请求了另一个 API(比如获取用户信息),那个 API 报错了,但日志被截断或没有记录。

终于正常了,还需要开启新用户注册

小结:在论坛搜索相关分享时,可能是没有找到正确的版本,经此折腾。

方案一:本次记录,OAuth 集成OIDC

1、管理员登录new-api网站-系统信息-服务器地址 默认为空,填写new-api网站地址,例如http://new-api.2026.com

2、OAuth 集成OIDC默认设置 默认为重定向 URL:new-api网站地址/oauth/oidc

第1步修改之后,此重定向 URL:http://new-api.2026.com/oauth/oidc

2、在论坛https://4gfj4hgkj4as4.pages.dev/oauth-provider/applications申请应用,获取Client ID、Client Secret,记得保存到记事本,Client Secret只显示一次,后续只能重置;重定向 URL 填写第1步获取的重定向 URL:http://new-api.2026.com/oauth/oidc

3、在new-api网站OAuth 集成OIDC

其中 链接时qwen3.7-plus专家指导,在SSH执行

curl -s https://4gfj4hgkj4as4.pages.dev/.well-known/openid-configuration

5、记得new-api开启用户注册,其他设置按个人

方案二:自定义OAuth 提供商【推荐】

添加 OAuth 提供商

提醒:很可能还需完成方案一的第1步,不然很可能出现本次折腾记录,大模型专家鬼打墙,重复,数据库,命令,各种解决方案,想到/差点放弃,一次意外发现/很庆幸,找到问题症结,最后成功接入!

详细见**new-api 接入NodeLoc 登录教程**2026-6-21

最后,仅以此贴感谢qwen3.7-plus专家,还有自己不放弃的精神,折腾几个小时-意外成功!

4 Likes

概括:技术不够。。。

1 Like

填个oidc自动获取的端点然后把cilent id和secret填上好像就行

2 Likes

精神可嘉,技术多磨练

1 Like

接受,本来很简单,因为没找到/看到正确指引,折腾了几个小时,成功后,

1、在与qwen对话过程中,意外提到new-api的版本,于是就去看官方new-api文档,是采用自定义 OAuth 提供商的方案自定义 OAuth 提供商 | New API

2、也就在刚才发帖时,看到对话框弹出,才知道论坛有最新指引。

其实,把NL授权登录文档丢给Qwen也能查出部分问题。。。

说到版本,1panel默认装老版

哈哈,感谢老板鼓励,纯小白一个,非相关专业,以后继续努力,多学习

1 Like

的确有很多方案,感谢指导,大模型的确可解决很多问题,

感谢佬的分享,这一定会帮到很多人的

直接一键安装了,1panel辅助,目前作为管理容器的面板,或SSH登录等,不过上次使用最多的还是2025年8月,印象中当时应用没有AI单列,

对的,就是new-api和论坛最新指引的方案二

希望,本次仅作记录,实际操作还是看官方指引,这样节省时间

可以直接丢给ai的 麻烦了 感谢分享

People who love to learn deserve a thumbs up—just do your best!

1 Like