说明:此贴仅作日常记录,正常做法是按论坛指引,方便快捷!
**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”: “”
罪魁祸首在这里!
已按照要求修改, 点击使用论坛登录跳转到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 中提取的**准确地址**,分别填入对应的字段中
-
**授权端点 (Authorization Endpoint)**:
-
**令牌端点 (Token Endpoint)**:
-
**用户信息端点 (User Info Endpoint)**:
找到很重要的问题
第一二步完全按照以上,浏览器无痕模式打开使用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`)。
###
强制修正数据库配置(请务必执行)执行命令
**问题出在这里**:数据库里实际存储的键名(Key)是**带点 `.`** 的(例如 `oidc.authorization_endpoint`),而我之前给您的 SQL 命令中使用的是**带下划线 `_`** 的(`oidc_authorization_endpoint`)。
又是一堆命令修复数据库***
**太棒了!数据库已经 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 响应**。
###
第一步:检查“环境变量”是否覆盖了数据库配置(极高概率!)
###
第二步:检查 `redirect_uri` 是否被偷偷加了“致命斜杠”
###
第三步:容器内真实请求测试(验证是否被 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,网站地址 是无法修改的
###
终极修复:通过数据库强制修改主页 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专家,还有自己不放弃的精神,折腾几个小时-意外成功!






