测试OAuth2

This commit is contained in:
linghutianhao
2026-08-14 17:16:25 +08:00
parent 8b6b8e7ab7
commit 5c4a471280
5 changed files with 147 additions and 24 deletions
+114
View File
@@ -127,6 +127,120 @@ GITEE_CLIENT_ID=xxx GITEE_CLIENT_SECRET=xxx node server.js
### sveltia-cms + gitea(当前使用)
Sveltia CMS 直接对接 Gitea:浏览器登录 Gitea(OAuth2 隐式授权),编辑内容保存后直接提交到 Gitea 仓库。
```
浏览器 → Sveltia CMS UI (localhost:3000/admin) → Gitea API (115.190.192.69:3011)
→ OAuth 登录 → 直接 commit/push
```
**配置(static/admin/config.yaml**
```yaml
backend:
name: gitea
repo: admin/docusaurus
branch: main
base_url: http://115.190.192.69:3011
auth_endpoint: /login/oauth/authorize
auth_scope: read_user,write:repository
```
**Gitea 侧要做两件事(一次性):**
1. 创建 OAuth2 应用
- 登录 Gitea → 头像 → 设置 → 应用 → 管理 OAuth2 应用程序 → 创建新应用
- 应用名称:`Sveltia CMS`
- 重定向 URI`http://localhost:3000/admin/`(必须与访问 CMS 的地址完全一致,含结尾斜杠;以后换域名/端口要回来改)
- 创建后复制 **Client ID**,填到 `static/admin/config.yaml``backend.client_id`(去掉注释)(隐式授权不需要 Secret)
2. 开启 CORS(改 Gitea 服务器上的 `app.ini`,然后重启 Gitea
```ini
[cors]
ENABLED = true
SCHEME = http
ALLOW_DOMAIN = localhost:3000
ALLOW_SUBDOMAIN = false
METHODS = GET,POST,PUT,PATCH,DELETE,OPTIONS
MAX_AGE = 600
ALLOW_CREDENTIALS = false
```
> app.ini 位置:Windows 一般在 `C:\Program Files\Gitea\custom\conf\app.ini`Linux 在 `/etc/gitea/app.ini`;也可以在 Gitea 后台「站点管理 → 配置」里看到实际路径。
> 若从局域网其他电脑访问,把 `ALLOW_DOMAIN` 改成对应主机名/IP。
**启动与访问**
```bash
npm start
# 打开 http://localhost:3000/admin/index.html (若 /admin/ 被 Docusaurus 路由拦截就用这个)
```
点 Login with Gitea → 授权后即可编辑,保存即提交到 `admin/docusaurus` 的 `main` 分支。
**排错**
- 登录跳转后报 `invalid client` / 授权页打不开:`client_id` 没填或填错 → 检查 `backend.client_id`
- 登录成功但列表/保存报 CORS 错误(控制台 `Access-Control-Allow-Origin`):Gitea 的 `[cors]` 没开或 `ALLOW_DOMAIN` 没包含 `localhost:3000`,或 Gitea 没重启
- 重定向 URI 不匹配(Gitea 报 `invalid redirect_uri`):Gitea 里 OAuth 应用的重定向 URI 必须与浏览器地址栏实际访问的 CMS 地址逐字符一致
- 分支不对:确认 `branch: main` 与仓库默认分支一致
### 部署到服务器(115.190.192.69,站点 3000 端口 / Gitea 3011 端口)
站点和 Gitea 放同一台服务器,浏览器访问 `http://115.190.192.69:3000/admin/`CMS 直连 Gitea3011)。
**1. 构建**
```bash
npm run build # 产物在 build/
```
**2. 把代码弄到服务器(推荐源码方式,便于后续自动重建)**
```bash
# 服务器上(需装 node ≥ 20)
git clone http://115.190.192.69:3011/admin/docusaurus.git
cd docusaurus
npm install
```
**3. 启动站点(3000 端口)**
```bash
npm run build && npm run serve -- --host 0.0.0.0 --port 3000
# 或用 nginx/caddy 把 build/ 目录静态托管在 3000 端口
# 防火墙放行 3000 端口
```
**4. Gitea 侧(一次性,改完重启 Gitea)**
- OAuth 应用的重定向 URI 加一行:`http://115.190.192.69:3000/admin/`(本地调试的 `http://localhost:3000/admin/` 可保留,多行添加)
- `app.ini` 的 CORS
```ini
[cors]
ENABLED = true
SCHEME = http
ALLOW_DOMAIN = 115.190.192.69:3000
ALLOW_SUBDOMAIN = false
METHODS = GET,POST,PUT,PATCH,DELETE,OPTIONS
MAX_AGE = 600
ALLOW_CREDENTIALS = false
```
**5. 访问 `http://115.190.192.69:3000/admin/` → Login with Gitea**
**内容更新闭环(关键)**
CMS 里保存 = 直接 commit 到 Gitea 仓库,但静态站点不会自动更新,需要服务器重建:
- **方案 A(推荐)**Gitea 建 Push WebhookURL 指向服务器上的小脚本,如 `http://115.190.192.69:8080/hook`),脚本收到推送后执行 `git pull && npm run build`,再重启/重载静态服务
- **方案 B(手动)**:改完内容后 SSH 上服务器 `git pull && npm run build`
- **方案 C(省事)**:服务器定时任务每分钟 `git pull`,有变更才 build
### tina-cms(卡)
https://tina.io/docs/reference/config