Skip to content

Commit 0bdce76

Browse files
Lokins577claude
andcommitted
docs: 跟进 Prism 修复,补本地联调步骤
Prism 4fcf53b 修好了团队应用端点的 redirect_uri 与 scope 校验, teams:read 创建时可直接勾选,"建完补勾"降级为旧实例的注意事项。 新增本地联调一节:登录链路涉及 Prism、回调地址、scope、身份组映射四处配合, 错一处线上都只表现为"登录后是游客",先在本地跑通比部署完回头查便宜。 特别标注 SITE_URL 本地必须用 http,否则 cookie 的 Secure 标志会让登录静默失败。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent e090b7e commit 0bdce76

1 file changed

Lines changed: 54 additions & 25 deletions

File tree

docs/deployment.md

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,33 +33,15 @@ wrangler r2 bucket create nsuk-uploads
3333
| 追加重定向 URI | `http://127.0.0.1:3000/api/auth/callback`(本地开发) |
3434
| allowed_scopes | `openid` `profile` `email` `offline_access` |
3535

36-
### ⚠️ 建完必须再补一步:勾上 `teams:read`
36+
`teams:read` 在创建时直接勾上即可。
3737

38-
**创建时勾 `teams:read` 是无效的。** 团队应用创建端点
39-
`POST /api/teams/:id/apps`)对 scope 做了硬编码过滤:
38+
> 若 Prism 实例早于 `4fcf53b`,团队应用创建端点会把 `teams:read` 静默丢弃
39+
> (界面上勾了、保存成功、无报错,但没写进去)。这种情况需要建完后进应用详情页
40+
> 再勾一次保存 —— 更新走 `PATCH /api/apps/:id`,不受该限制。
4041
41-
```js
42-
.filter((s) => ["openid","profile","email","apps:read","offline_access"].includes(s))
43-
```
44-
45-
`teams:read` 不在里面,会被**静默丢弃** —— 界面上勾了、保存成功、没有任何报错,
46-
但它就是没写进去。
47-
48-
正确做法是**创建完再改一次**:进应用详情页 → Scopes → 勾上 `teams:read` → 保存。
49-
更新走的是 `PATCH /api/apps/:id`,那里用的是宽松的 `isAllowedScope`,允许该 scope。
50-
改动需要**团队 admin 及以上**权限。
51-
52-
也可以用 API:
53-
54-
```bash
55-
curl -X PATCH https://<prism>/api/apps/<appId> \
56-
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
57-
-d '{"allowed_scopes":["openid","profile","email","offline_access","teams:read"]}'
58-
```
59-
60-
**没配上的表现**:所有人都能登录,但一律是游客,赞助者拿不到模组令牌,
61-
且没有任何报错。官网对此有专门的诊断日志 ——
62-
如果 Worker 日志里出现 `ID token 里没有任何 in_team_* claim`,就是这个问题。
42+
**漏配的表现**:所有人都能登录,但一律是游客,赞助者拿不到模组令牌,且没有任何
43+
报错。官网对此有专门的诊断 —— Worker 日志出现
44+
`ID token 里没有任何 in_team_* claim` 就是这个问题。
6345

6446
**关于过度授权**`teams:read` 会带上用户全部团队的 membership claim。在 Prism 的
6547
P1(应用预绑定团队的窄 scope)落地前没有更窄的选择 —— 单团队 scope 要求授权者是
@@ -184,6 +166,53 @@ wrangler secret put MOD_LICENSE_PRIVATE_KEY
184166
wrangler secret put WEBHOOK_SECRET
185167
```
186168

169+
## 四点五、先在本地跑通(强烈建议)
170+
171+
登录链路涉及 Prism、回调地址、scope、身份组映射四处配合,任何一处错了线上都
172+
只表现为「登录后是游客」。在本地把它跑通,比部署完再回头查便宜得多。
173+
174+
前提:第 1.2 步的重定向 URI 里已经加了 `http://127.0.0.1:3000/api/auth/callback`
175+
176+
```bash
177+
cp .dev.vars.example .dev.vars
178+
```
179+
180+
`.dev.vars` 里填上真实值(这个文件已在 `.gitignore` 中):
181+
182+
```
183+
PRISM_CLIENT_SECRET="…"
184+
MOD_LICENSE_PRIVATE_KEY="…"
185+
WEBHOOK_SECRET="…"
186+
PRISM_ISSUER="https://<prism 域名>"
187+
PRISM_CLIENT_ID="…"
188+
PRISM_TEAM_ID="…"
189+
SITE_URL="http://localhost:3000"
190+
```
191+
192+
`SITE_URL` 必须是 `http://localhost:3000` —— 它同时决定回调地址的拼法和
193+
cookie 的 `Secure` 标志,填成 https 的话本地浏览器不会存 cookie,登录会静默失败。
194+
195+
```bash
196+
pnpm db:migrate:local
197+
pnpm dev
198+
```
199+
200+
浏览器打开 <http://localhost:3000/account> → 用 Prism 登录,逐项确认:
201+
202+
- [ ] 能跳到 Prism 授权页并跳回来
203+
- [ ] 账号中心显示的身份组与 Prism 里给你打的组一致
204+
- [ ] 终端日志**没有** `没有任何 in_team_* claim`
205+
- [ ] 给自己打上 `sponsor` 组 → 重新登录 → 模组授权区出现,能生成令牌
206+
- [ ] 拿生成的令牌调一次 validate,应返回 License:
207+
208+
```bash
209+
curl -X POST http://localhost:3000/api/mod/validate \
210+
-H "Content-Type: application/json" \
211+
-d '{"token":"<刚生成的令牌>","fingerprint":"local-test"}'
212+
```
213+
214+
webhook 本地收不到(Prism 打不到 localhost),留到线上验。
215+
187216
## 五、建表与部署
188217

189218
```bash

0 commit comments

Comments
 (0)