From 75586375677eb80be5ab04e11a73b0bea09d230e Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 3 Nov 2026 00:00:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E7=9F=AD=E4=BF=A1=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=BB=98=E8=AE=A4=E5=85=B3=EF=BC=8C=E6=8D=A2=E6=88=90?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7/=E9=82=AE=E7=AE=B1=20+=20=E5=AF=86?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E5=8F=91=E4=BF=A1=E9=82=AE=E7=AE=B1=E8=BF=9B?= =?UTF-8?q?=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户要求:内测的固定验证码 123456 等于"知道手机号就能进任何账号",先关掉; 登录改用账号密码,并多一种"邮箱当账号名"的方式;发信邮箱要能在后台改。 短信那条路(默认关): - `SMS_LOGIN_ENABLED=false`,`/auth/sms/send` 与 `/auth/login` 统一回 2017,不是静默失败; - 生产校验改成"开着短信登录就必须配真通道",不开时 provider 是 dev 也不拦; - 新增 `GET /auth/methods`,登录页据此渲染,关着的路不出现(少一次"点进去才发现不能用")。 邮箱登录: - `app_user.email` + `uq_app_user_email`(`lower(email)` 部分索引),登录与绑定都归一成小写; - `POST /auth/login/password` 收 `phone` 或 `email`(二选一),失败统一 2013、连错 10 次锁 15 分钟; - 绑定在 `PATCH /auth/me`:格式错 2018、被占用 2019、留空串表示解绑。 系统设置(跨租户,只有平台管理员能改): - 新表 `system_setting`(不挂租户、无 RLS,写权限由 `deps.platform_admin` 把关); - `GET/PUT /settings/smtp`、`POST /settings/smtp/test`,授权码只写不读,留空表示沿用旧值; - `services/mail.py` 只用标准库 smtplib:465 走 SSL、587 走 STARTTLS,认证/拒收/网络失败都归 2020 但消息不同; - Web 新增「系统设置」页(状态卡 + 测试发信),侧栏只对平台管理员显示入口;账号页补「邮箱」。 验证:pytest 130 passed、ruff check/format 全绿、tsc 通过、vite build 通过; `web/e2e/login-email-smtp.mjs` 15 项全绿(含用 126 授权码真发一封测试邮件)。 顺带记下的两个坑:`platform_admin_phones` 是 list,pydantic-settings 会按 JSON 解析, 要用 `NoDecode` 交给 before-validator 拆逗号;迁移号写成 0009 会撞既有的 0009,一并改成 0010。 --- 2.Design/API.md | 74 ++++- 2.Design/ROADMAP-M0-M1.md | 51 ++++ 2.Design/screens/web-account-email.png | Bin 0 -> 85170 bytes 2.Design/screens/web-login-password.png | Bin 0 -> 147599 bytes 2.Design/screens/web-settings-smtp.png | Bin 0 -> 59660 bytes .../versions/0010_email_and_settings.py | 67 ++++ backend/app/api/auth.py | 112 +++++-- backend/app/api/settings.py | 83 +++++ backend/app/config.py | 38 ++- backend/app/deps.py | 16 + backend/app/errors.py | 8 + backend/app/main.py | 6 +- backend/app/models.py | 19 ++ backend/app/services/mail.py | 202 ++++++++++++ backend/tests/conftest.py | 5 +- backend/tests/test_account.py | 2 + backend/tests/test_config_prod.py | 18 +- backend/tests/test_login_email.py | 131 ++++++++ backend/tests/test_settings_smtp.py | 130 ++++++++ web/e2e/login-email-smtp.mjs | 221 ++++++++++++++ web/e2e/shots-account-login.mjs | 59 ++++ web/src/App.tsx | 2 + web/src/components/SideRail.tsx | 21 +- web/src/components/icons.tsx | 8 + web/src/lib/client.ts | 1 + web/src/lib/types.ts | 20 ++ web/src/pages/Account.tsx | 62 +++- web/src/pages/Login.tsx | 152 +++++++--- web/src/pages/Settings.tsx | 287 ++++++++++++++++++ 29 files changed, 1702 insertions(+), 93 deletions(-) create mode 100644 2.Design/screens/web-account-email.png create mode 100644 2.Design/screens/web-login-password.png create mode 100644 2.Design/screens/web-settings-smtp.png create mode 100644 backend/alembic/versions/0010_email_and_settings.py create mode 100644 backend/app/api/settings.py create mode 100644 backend/app/services/mail.py create mode 100644 backend/tests/test_login_email.py create mode 100644 backend/tests/test_settings_smtp.py create mode 100644 web/e2e/login-email-smtp.mjs create mode 100644 web/e2e/shots-account-login.mjs create mode 100644 web/src/pages/Settings.tsx diff --git a/2.Design/API.md b/2.Design/API.md index e94350c..1f8cc2d 100644 --- a/2.Design/API.md +++ b/2.Design/API.md @@ -29,10 +29,14 @@ | 2010 | 429 | 验证码请求太频繁 | 倒计时 60 秒 | | 2011 | 400 | 验证码错误/已过期 | 重发 | | 2012 | 403 | 账号被禁用 | 联系管理员 | -| 2013 | 400 | 密码错误,或这个号还没设过密码 | 提示改用验证码登录 | +| 2013 | 400 | 密码错误,或这个号还没设过密码 | 提示核对账号与密码 | | 2014 | 400 | 该账号没有密码(保留码) | 先设密码 | | 2015 | 422 | 密码太弱(少于 8 位 / 缺字母或数字 / 与旧密码相同) | 就地提示规则 | -| 2016 | 429 | 密码连错太多次(15 分钟内 10 次) | 提示稍后再试或用验证码 | +| 2016 | 429 | 密码连错太多次(15 分钟内 10 次) | 提示稍后再试 | +| 2017 | 403 | 这条登录方式没开(默认只开密码) | 换密码登录 | +| 2018 | 422 | 邮箱格式不对 | 就地提示 | +| 2019 | 409 | 邮箱已被别的账号占用 | 换一个 | +| 2020 | 502 | 发信失败(SMTP 认证/收件人/网络) | 去「系统设置」核对授权码 | | 3001 | 404 | 工作区不存在 | — | | 3003 | 403 | 不是该工作区成员 | **不要**提示"工作区不存在" | | 3004 | 403 | 角色权限不足 | 隐藏对应按钮 | @@ -65,6 +69,19 @@ ## 1. 认证 `/auth` +登录方式有三种,**默认只开密码那一种**。服务端把"现在开着哪些"告诉前端,前端据此渲染, +免得用户点进一条关着的路: + +### `GET /auth/methods` + +```json +{ "password": true, "email_password": true, "sms_code": false } +``` + +`SMS_LOGIN_ENABLED=false`(默认)时,`POST /auth/sms/send` 与 `POST /auth/login` 都回 `2017` +「短信验证码登录暂未开放」。理由:dev 环境的固定码等于"知道手机号就能进任何账号", +这条路必须显式打开,生产打开时还会强制要求真短信通道(见 `deploy` 文档的启动校验)。 + ### `POST /auth/sms/send` ```json @@ -72,7 +89,7 @@ ``` 响应 `data: { dev_code?: "123456" }`。`ENV=dev` 时才回显验证码,生产没有这个字段。 -60 秒内重复请求 → `2010`。 +60 秒内重复请求 → `2010`。短信登录关着时 → `2017`。 ### `POST /auth/login` @@ -97,12 +114,19 @@ ### `POST /auth/login/password` +手机号和邮箱都走这一个入口,`phone` 与 `email` **二选一**(都给或都不给 → 422): + ```json { "phone": "13800000000", "password": "dadao2026" } +{ "email": "shufen@126.com", "password": "dadao2026" } ``` 返回与验证码登录同形状的 `{ user, tokens }`。**没设过密码的账号一律回 `2013`**,与"密码错"同一个码 -(不区分账号是否存在,少一个探测面)。15 分钟内连错 10 次 → `2016`,期间正确密码也挡住。 +(不区分账号是否存在,少一个探测面;手机号与邮箱两种账号也不会互相暴露)。15 分钟内连错 10 次 → `2016`, +期间正确密码也挡住,计数键是"手机号或邮箱"本身。 + +邮箱按 `lower(email)` 比较,绑定与登录都做 `strip` + 小写归一,所以 `Shufen@126.com` 与 +`shufen@126.com` 是同一个账号。 密码校验是 scrypt(`n=2^14, r=8, p=1`,标准库实现,不引 passlib),库里存 `scrypt$n$r$p$salt$hash`。`password_hash` 这一列**永不出现在任何响应里**。 @@ -119,15 +143,51 @@ ### `PATCH /auth/me` ```json -{ "nickname": "大道" } +{ "nickname": "大道", "email": "shufen@126.com" } ``` -返回 `{ "user": { … } }`。空昵称(strip 后为空)→ `1002`。手机号暂不支持自助换号。 +字段都可选,只改传上来的。邮箱留空串表示**解绑**(之后不能再用邮箱登录)。 +格式不对 → `2018`,已被别的账号占用 → `2019`。返回 `{ "user": { … } }`。 +空昵称(strip 后为空)→ `1002`。手机号暂不支持自助换号。 ### `GET /auth/me` 返回 `{ user, workspaces[] }`,`workspaces[].role` 是当前用户在该工作区的角色。 -`user` 里带 `has_password`,前端据此决定账号页显示"设置密码"还是"修改密码"。 +`user` 里带 `has_password`(前端据此显示"设置密码"还是"修改密码")、`email`、`platform_admin` +(能不能进「系统设置」)。 + +--- + +## 1.5 系统设置 `/settings` + +平台级配置,**全站一份、不挂租户**,只有 `PLATFORM_ADMIN_PHONES` 里的人能读写(否则 `3004`)。 +目前只有发信邮箱一项——它承载找回密码与以后的邮件通知,属于"改一次全站受影响"的东西, +放后台可改而不用登服务器改 env。 + +| 方法 | 路径 | 说明 | +|---|---|---| +| GET | `/settings/smtp` | 当前配置(**不含授权码**) | +| PUT | `/settings/smtp` | 保存,立即生效,不重启 | +| POST | `/settings/smtp/test` | 发一封测试邮件,确认通道通不通 | + +```json +// PUT /settings/smtp +{ "host": "smtp.126.com", "port": 465, "username": "shufenhf@126.com", + "password": "客户端授权码", "from_name": "达道Task", "use_ssl": true } +``` + +`password` 传 `null` 或空串表示**沿用旧值**(改别的字段时不用重填授权码)。 + +```json +// GET /settings/smtp +{ "host": "smtp.126.com", "port": 465, "username": "shufenhf@126.com", + "password_set": true, "from_name": "达道Task", "use_ssl": true, + "configured": true, "source": "db", "updated_at": "2026-11-02T12:00:00Z" } +``` + +`source` 说明当前值来自数据库(`db`)、服务器环境变量兜底(`env`),还是根本没配(`none`)。 +发信失败统一 `2020`(`502`),消息里写清是认证失败还是收件人被拒——授权码要用邮箱服务商的 +**客户端授权码**,不是登录密码。 --- diff --git a/2.Design/ROADMAP-M0-M1.md b/2.Design/ROADMAP-M0-M1.md index 93d1d97..e38e002 100644 --- a/2.Design/ROADMAP-M0-M1.md +++ b/2.Design/ROADMAP-M0-M1.md @@ -541,3 +541,54 @@ 也看不到安装提示(桌面用 `127.0.0.1` 打开可以)。要么加域名 + 证书反代(`443 → 127.0.0.1:8200`), 要么用 Cloudflare Tunnel 之类拿个 https 域名;应用代码不用改。已写进 `DEPLOY.md` 第 6 节 - 安卓端还在走自己的 OTA(原生包),和 PWA 是两条路;要不要让安卓也改成加载 Web,等产品定 + +--- + +## 9. 登录方式与系统设置(2026-11-02) + +### 9.1 需求 +用户原话:"手机验证码我暂时不启动,所以把12345这种测试验证码取消了吧,我用账号密码来登陆…… +再增加一种登陆方式就是邮箱……并且这个邮箱是可以后台配置的啊;"(同时要求三个列表的标题样式统一) + +### 9.2 决定 +- **短信登录默认关**(`SMS_LOGIN_ENABLED=false`):dev 环境的固定码等于"知道手机号就能进任何账号"。 + 关掉后 `/auth/sms/send` 与 `/auth/login` 统一回 `2017`,不是静默失败;登录页按 `GET /auth/methods` + 渲染,关着的路根本不显示(少一次"点进去才发现不能用")。 +- **邮箱是账号名**,不是通知地址:绑了就能用「邮箱 + 密码」登录,`lower(email)` 唯一。 +- **SMTP 存数据库、后台可改**:发信账号是平台级运维参数,改它不该要人登服务器改 env 再重启。 + 只有平台管理员(`PLATFORM_ADMIN_PHONES` 白名单)能读写,因为系统设置是跨租户的。 +- 密码哈希继续用标准库 scrypt,不引 passlib/bcrypt(多一个升级债,换不来安全)。 + +### 9.3 后端 +| 位置 | 内容 | +|---|---| +| `app/config.py` | `sms_login_enabled=False`、`platform_admin_phones`(`NoDecode` + CSV 拆分,别让 pydantic 按 JSON 解析)、`smtp_*` 兜底字段;生产校验改为"开着短信登录就必须是真通道" | +| `app/security.py` | `hash_password` / `verify_password` / `password_problem`(scrypt,8–64 位且字母+数字) | +| `app/models.py` | `AppUser.email`;新表 `system_setting(key, value JSONB, updated_by)`,**不挂租户、无 RLS**,写权限靠 `deps.platform_admin` | +| `alembic/versions/0010_email_and_settings.py` | `system_setting` 建表 + `app_user.email` + `uq_app_user_email`(`lower(email)` 部分索引)+ GRANT | +| `app/services/mail.py` | 读库优先、环境变量兜底;465 走 SSL、587 走 STARTTLS;认证失败/收件人被拒/网络失败都归 `2020` 但消息不同 | +| `app/api/auth.py` | `GET /auth/methods`、`POST /auth/login/password`(`phone`/`email` 二选一)、`PATCH /auth/me`(改昵称/绑解绑邮箱)、`sms` 两条加开关闸门 | +| `app/api/settings.py` | `GET/PUT /settings/smtp`、`POST /settings/smtp/test`,全部 `PlatformAdminDep` | +| `app/deps.py` | `platform_admin` / `PlatformAdminDep` | + +### 9.4 Web +- `pages/Login.tsx`:先问 `/auth/methods` 再渲染;账号档「手机号 / 邮箱」,密码框;短信关着时不出现「验证码」档 +- `pages/Settings.tsx`(新):SMTP 表单(服务器/端口/账号/授权码/显示名/SSL)+ 当前状态卡(能不能发信、授权码设没设、上次修改、来源 db/env)+ 测试发信 +- `pages/Account.tsx`:基本信息加「邮箱」(说明"留空保存就是解绑")、按钮改「保存资料」、平台管理员多一个「系统设置」入口卡 +- `components/SideRail.tsx`:平台管理员才多一条「系统设置」(移动端顶条同理),图标 `Sliders` +- `pages/Tasks.tsx:262` / `pages/Tickets.tsx:248`:列表标题统一成 `text-[15px] font-semibold leading-6`(与知识一致) + +### 9.5 验证 +- `backend/tests/test_login_email.py`(7 例)+ `test_settings_smtp.py`(6 例)+ 改写的 `test_config_prod.py`; + 全量 `pytest` 130 passed、`ruff check` / `format --check` 全绿 +- `web/e2e/login-email-smtp.mjs`(**15 项全绿**):methods 说短信关着 → 发码回 2017 → 登录页没有验证码档 → + 手机号密码进首页 → 绑邮箱 → 邮箱登录(大小写不敏感)→ 解绑后回 2013 → 侧栏出现「系统设置」 → + 存授权码(接口不回显)→ **真发一封测试邮件成功** → 账号页回填邮箱 → 控制台零报错 +- 截图:`2.Design/screens/web-login-password.png`、`web-account-email.png`、`web-settings-smtp.png` + +### 9.6 踩过的坑 +- `platform_admin_phones` 是 `list[str]`,pydantic-settings 会把它当 JSON 解析,`A,B` 直接启动失败: + 用 `Annotated[list[str], NoDecode]` 交给 before-validator 拆逗号 +- 迁移号写成 `0009` 会撞 `0009_knowledge_category_color.py`,pytest 报 `Multiple head revisions` +- e2e 里 `getByLabel("账号")` 会同时命中侧栏 `aria-label="账号设置"`,要用 `input[aria-label="账号"]`; + 侧栏的「系统设置」要等 `/auth/me` 落地才渲染,断言得 `waitForFunction` 而不是立刻 `count()` diff --git a/2.Design/screens/web-account-email.png b/2.Design/screens/web-account-email.png new file mode 100644 index 0000000000000000000000000000000000000000..16c7bdd3ba6f31adc2962071ab29d1330e67bc52 GIT binary patch literal 85170 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 IqOU*xH)H+t`v3p{ literal 0 HcmV?d00001 diff --git a/2.Design/screens/web-login-password.png b/2.Design/screens/web-login-password.png new file mode 100644 index 0000000000000000000000000000000000000000..23a0b5f57496f55a2428b5a7572907e4caba5533 GIT binary patch literal 147599 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 KDiuoB@BR-`%QBk) literal 0 HcmV?d00001 diff --git a/2.Design/screens/web-settings-smtp.png b/2.Design/screens/web-settings-smtp.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a76e6a7c924fde3a60fbbc8db4c247617e73aa GIT binary patch literal 59660 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 z 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 Sem*N7gu{um$BU0${^K7dCQ)Ai literal 0 HcmV?d00001 diff --git a/backend/alembic/versions/0010_email_and_settings.py b/backend/alembic/versions/0010_email_and_settings.py new file mode 100644 index 0000000..a310c69 --- /dev/null +++ b/backend/alembic/versions/0010_email_and_settings.py @@ -0,0 +1,67 @@ +"""邮箱登录 + 平台设置(M1 账号功能) + +Revision ID: 0010 +Revises: 0009 +Create Date: 2026-11-02 + +两件事: + +1. `app_user.email`:邮箱当账号名,配合密码登录。唯一性用 `lower(email)` 的部分 + 唯一索引——邮箱大小写不敏感,`Steven@x.com` 和 `steven@x.com` 是同一个人; + 允许为空(老用户先不绑)。 + +2. `system_setting`:平台级键值表,第一项就是 SMTP。**这张表刻意不挂 workspace_id、 + 也不开 RLS**:发信账号是整台服务共用的,属于平台而不是某个租户,开 RLS 反而要 + 编一个"当前租户"出来。写权限在 API 层用平台管理员白名单把关(deps.platform_admin), + 应用角色只有表的读写权,没有建表/改结构的权。 +""" + +from __future__ import annotations + +from collections.abc import Sequence + +from alembic import op + +from app.roles import APP_ROLE + +revision: str = "0010" +down_revision: str = "0009" +branch_labels: Sequence[str] | None = None +depends_on: Sequence[str] | None = None + + +CREATE_SQL = """ +CREATE TABLE IF NOT EXISTS system_setting ( + key VARCHAR(64) PRIMARY KEY, + value JSONB NOT NULL DEFAULT '{}'::jsonb, + updated_by UUID REFERENCES app_user(id) ON DELETE SET NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), + version INTEGER NOT NULL DEFAULT 1 +) +""" + +INDEX_STATEMENTS = ( + "ALTER TABLE app_user ADD COLUMN IF NOT EXISTS email VARCHAR(255)", + "CREATE UNIQUE INDEX uq_app_user_email ON app_user (lower(email)) WHERE email IS NOT NULL", + "COMMENT ON TABLE system_setting IS '平台级设置(SMTP 等),不挂租户、无 RLS'", +) + +GRANT_SQL = ( + f"GRANT SELECT, INSERT, UPDATE, DELETE ON system_setting TO {APP_ROLE}", + f"GRANT SELECT, UPDATE ON app_user TO {APP_ROLE}", +) + + +def upgrade() -> None: + op.execute(CREATE_SQL) + for statement in INDEX_STATEMENTS: + op.execute(statement) + for statement in GRANT_SQL: + op.execute(statement) + + +def downgrade() -> None: + op.execute("DROP INDEX IF EXISTS uq_app_user_email") + op.execute("ALTER TABLE app_user DROP COLUMN IF EXISTS email") + op.execute("DROP TABLE IF EXISTS system_setting") diff --git a/backend/app/api/auth.py b/backend/app/api/auth.py index a176e35..dadda16 100644 --- a/backend/app/api/auth.py +++ b/backend/app/api/auth.py @@ -1,17 +1,20 @@ -"""认证:手机号 + 验证码,可选登录密码。 +"""认证:手机号 / 邮箱 + 密码,手机验证码可选。 -M0 只有验证码登录;密码是**可选**的第二条路:用户自己在账号设置里设一次, -之后登录页可以选「密码」;没设过密码的人只有验证码这一条,不受影响。 +当前**默认关掉短信验证码**(`SMS_LOGIN_ENABLED=false`):内测阶段的固定验证码 +等于"知道手机号就能进任意账号"。关掉后 `/auth/sms/send` 与 `/auth/login` 直接 +回 2017,登录走「手机号 或 邮箱 + 密码」。登录页先问 `/auth/methods`,只显示 +服务端真开着的登录方式,免得点进去才报错。 """ from __future__ import annotations import hmac +import re import secrets from fastapi import APIRouter -from pydantic import BaseModel, Field -from sqlalchemy import select +from pydantic import BaseModel, Field, model_validator +from sqlalchemy import func, select from ..config import get_settings from ..deps import CurrentUser, SessionDep @@ -31,6 +34,8 @@ router = APIRouter(prefix="/auth", tags=["认证"]) settings = get_settings() PHONE_PATTERN = r"^1[3-9]\d{9}$" +# 邮箱只做形状校验:真正的可达性靠发信验证,正则再严也证明不了地址存在 +EMAIL_RE = re.compile(r"^[^@\s]{1,64}@[^@\s]{1,190}\.[A-Za-z]{2,}$") # 密码登录连错这么多次就先锁一会儿:暴力猜密码的成本必须比猜验证码高 PASSWORD_FAIL_LIMIT = 10 @@ -41,14 +46,24 @@ def mask_phone(phone: str) -> str: return f"{phone[:3]}****{phone[-4:]}" if len(phone) == 11 else "***" +def normalize_email(email: str) -> str: + """邮箱大小写不敏感:统一小写存,登录时也按小写比。""" + return email.strip().lower() + + def _user_out(user: AppUser) -> dict: - """对外只给脱敏手机号;密码本身一个字节都不出去,只告诉客户端「设没设」。""" + """对外只给脱敏手机号;密码本身一个字节都不出去,只告诉客户端「设没设」。 + + 邮箱是用户自己的账号名,给全值(账号页要显示、要能改)。 + """ return { "id": str(user.id), "phone": mask_phone(user.phone), + "email": user.email, "nickname": user.nickname, "avatar_url": user.avatar_url, "has_password": bool(user.password_hash), + "platform_admin": user.phone in settings.platform_admin_phones, "created_at": user.created_at, } @@ -72,12 +87,23 @@ class LoginIn(BaseModel): class PasswordLoginIn(BaseModel): - phone: str = Field(pattern=PHONE_PATTERN) + """手机号或邮箱 + 密码。两个都给也行,手机号优先(老客户端只发 phone)。""" + + phone: str | None = Field(default=None, pattern=PHONE_PATTERN) + email: str | None = Field(default=None, max_length=255) password: str = Field(min_length=1, max_length=64) + @model_validator(mode="after") + def _one_account(self) -> PasswordLoginIn: + if not self.phone and not (self.email and self.email.strip()): + raise ValueError("手机号或邮箱填一个") + return self + class ProfilePatch(BaseModel): nickname: str | None = Field(default=None, min_length=1, max_length=32) + # 传空串表示解绑;不传表示不动 + email: str | None = Field(default=None, max_length=255) class PasswordIn(BaseModel): @@ -91,8 +117,25 @@ class RefreshIn(BaseModel): refresh_token: str = Field(min_length=10) +@router.get("/methods", summary="这台服务现在开放哪些登录方式") +async def methods() -> dict: + """登录页据此渲染,别让用户点进去才发现这条路关着。""" + return ok( + { + "password": True, + "email_password": True, + "sms_code": settings.sms_login_enabled, + } + ) + + @router.post("/sms/send", summary="发送登录验证码") async def send_code(body: SendCodeIn) -> dict: + if not settings.sms_login_enabled: + raise AppError( + ErrorCode.LOGIN_METHOD_DISABLED, + "短信验证码登录暂未开放,请用手机号或邮箱 + 密码登录", + ) store = get_store() if settings.sms_throttle_seconds > 0: hits = await store.incr(sms_throttle_key(body.phone), settings.sms_throttle_seconds) @@ -115,6 +158,11 @@ async def send_code(body: SendCodeIn) -> dict: @router.post("/login", summary="验证码登录(不存在则自动注册)") async def login(body: LoginIn, session: SessionDep) -> dict: + if not settings.sms_login_enabled: + raise AppError( + ErrorCode.LOGIN_METHOD_DISABLED, + "短信验证码登录暂未开放,请用手机号或邮箱 + 密码登录", + ) store = get_store() stored = await store.get(sms_code_key(body.phone)) if stored is None: @@ -135,28 +183,36 @@ async def login(body: LoginIn, session: SessionDep) -> dict: return ok({"user": _user_out(user), "tokens": _tokens_out(tokens)}) -@router.post("/login/password", summary="密码登录") +@router.post("/login/password", summary="手机号 / 邮箱 + 密码登录") async def login_password(body: PasswordLoginIn, session: SessionDep) -> dict: - """手机号 + 密码登录。 + """手机号或邮箱 + 密码登录。 - 两个细节: - - **不区分"没这个人"和"密码错"**,同一个错误码,别让登录接口变成手机号探测工具。 + 三个细节: + - **不区分"没这个人"和"密码错"**,同一个错误码,别让登录接口变成账号探测工具。 - 连错 PASSWORD_FAIL_LIMIT 次锁 PASSWORD_FAIL_TTL 秒;成功即清零,正常用户不会感知。 + 失败计数按"填的那个账号"记,换手机号/邮箱轮着试也照样累计。 + - 邮箱大小写不敏感(存的时候已经统一小写,这里再 lower 一次兜住历史数据)。 """ store = get_store() - fail_key = f"pwd_fail:{body.phone}" + account_key = body.phone or normalize_email(body.email or "") + fail_key = f"pwd_fail:{account_key}" if int(await store.get(fail_key) or 0) >= PASSWORD_FAIL_LIMIT: raise AppError( ErrorCode.LOGIN_TOO_MANY, - f"密码错误次数过多,请 {PASSWORD_FAIL_TTL // 60} 分钟后再试,或用验证码登录", + f"密码错误次数过多,请 {PASSWORD_FAIL_TTL // 60} 分钟后再试", ) - user = ( - await session.execute(select(AppUser).where(AppUser.phone == body.phone)) - ).scalar_one_or_none() + if body.phone: + stmt = select(AppUser).where(AppUser.phone == body.phone) + hint = "手机号或密码不对" + else: + stmt = select(AppUser).where(func.lower(AppUser.email) == account_key) + hint = "邮箱或密码不对" + + user = (await session.execute(stmt)).scalar_one_or_none() if user is None or not verify_password(body.password, user.password_hash): await store.incr(fail_key, PASSWORD_FAIL_TTL) - raise AppError(ErrorCode.PASSWORD_INVALID, "手机号或密码不对") + raise AppError(ErrorCode.PASSWORD_INVALID, hint) if user.status != "active": raise AppError(ErrorCode.ACCOUNT_DISABLED, "账号已停用") @@ -207,7 +263,7 @@ async def me(user: CurrentUser, session: SessionDep) -> dict: ) -@router.patch("/me", summary="改自己的昵称") +@router.patch("/me", summary="改自己的昵称与邮箱") async def update_me(body: ProfilePatch, user: CurrentUser, session: SessionDep) -> dict: row = await session.get(AppUser, user.id) if row is None: @@ -219,6 +275,26 @@ async def update_me(body: ProfilePatch, user: CurrentUser, session: SessionDep) raise AppError(ErrorCode.VALIDATION_FAILED, "昵称不能为空") row.nickname = nickname + if body.email is not None: + raw = body.email.strip() + if not raw: + # 解绑:邮箱只是"多一条登录方式",不是必填项 + row.email = None + else: + email = normalize_email(raw) + if not EMAIL_RE.match(email): + raise AppError(ErrorCode.EMAIL_INVALID, "邮箱格式不对") + taken = ( + await session.execute( + select(AppUser.id).where( + func.lower(AppUser.email) == email, AppUser.id != user.id + ) + ) + ).scalar_one_or_none() + if taken is not None: + raise AppError(ErrorCode.EMAIL_TAKEN, "这个邮箱已经绑在别的账号上了") + row.email = email + await session.flush() return ok({"user": _user_out(row)}) diff --git a/backend/app/api/settings.py b/backend/app/api/settings.py new file mode 100644 index 0000000..a5624e9 --- /dev/null +++ b/backend/app/api/settings.py @@ -0,0 +1,83 @@ +"""系统设置:平台级的运维参数(目前只有 SMTP)。 + +为什么单独一个路由而不是塞进 auth:这些设置**不属于任何工作区**, +权限也不是租户角色,而是「平台管理员」白名单(`deps.platform_admin`)。 +把它和租户接口分开,读代码的人一眼就知道这里改的是整台服务的配置。 +""" + +from __future__ import annotations + +from fastapi import APIRouter +from pydantic import BaseModel, Field + +from ..deps import PlatformAdminDep, SessionDep +from ..errors import AppError, ErrorCode +from ..models import AppUser +from ..schemas import ok +from ..services import mail + +router = APIRouter(prefix="/settings", tags=["系统设置"]) + + +class SmtpIn(BaseModel): + """授权码留空表示"沿用原来的",不传等于没改——避免每次保存都要重新粘贴一遍。""" + + host: str = Field(min_length=1, max_length=255) + port: int = Field(default=465, ge=1, le=65535) + username: str = Field(min_length=1, max_length=255) + password: str | None = Field(default=None, max_length=255) + from_name: str = Field(default="达道Task", max_length=64) + use_ssl: bool = True + + +class TestMailIn(BaseModel): + # 不填就发给自己(账号里绑的邮箱),方便先确认通道通不通 + to: str | None = Field(default=None, max_length=255) + + +@router.get("/smtp", summary="读发信配置(授权码只回是否已设)") +async def get_smtp(admin: PlatformAdminDep, session: SessionDep) -> dict: + return ok(await mail.config_payload(session)) + + +@router.put("/smtp", summary="改发信配置,存库即时生效") +async def put_smtp(body: SmtpIn, admin: PlatformAdminDep, session: SessionDep) -> dict: + await mail.save_config( + session, + values={ + "host": body.host.strip(), + "port": body.port, + "username": body.username.strip(), + "password": (body.password or "").strip() or None, + "from_name": body.from_name.strip() or "达道Task", + "use_ssl": body.use_ssl, + }, + updated_by=admin.id, + ) + return ok(await mail.config_payload(session)) + + +@router.post("/smtp/test", summary="发一封测试邮件") +async def test_smtp(body: TestMailIn, admin: PlatformAdminDep, session: SessionDep) -> dict: + """真发一封。配错授权码、端口不通这类问题,只有真连一次才知道。""" + to = (body.to or "").strip() + if not to: + row = await session.get(AppUser, admin.id) + to = (row.email if row else None) or "" + if not to: + raise AppError(ErrorCode.VALIDATION_FAILED, "填一个收件邮箱,或先在自己的账号里绑一个") + + cfg = await mail.load_config(session) + if cfg is None: + raise AppError(ErrorCode.MAIL_SEND_FAILED, "还没有配置发信邮箱,请先填上面的 SMTP") + + await mail.send_mail( + cfg, + to=to, + subject="达道Task 测试邮件", + text=( + "这封信是从达道Task的「系统设置」里发出来的。\n\n" + "收到它说明 SMTP 配置可用:以后的找回密码、任务提醒都会走这条通道。\n" + ), + ) + return ok({"sent": True, "to": to}) diff --git a/backend/app/config.py b/backend/app/config.py index 8bf24f3..231c99d 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -4,10 +4,10 @@ from __future__ import annotations import os from functools import lru_cache -from typing import Literal +from typing import Annotated, Literal from pydantic import Field, field_validator -from pydantic_settings import BaseSettings, SettingsConfigDict +from pydantic_settings import BaseSettings, NoDecode, SettingsConfigDict DEV_JWT_SECRET = "dev-only-change-me" # noqa: S105 - 仅开发默认值,生产启动时会被校验拦下 @@ -60,6 +60,30 @@ class Settings(BaseSettings): # 内测开关:生产默认禁止固定验证码。确实要在内网试用时显式打开, # 启动会打 WARNING(见 main.py),其余生产校验照旧——绝不能配合公网暴露。 internal_test_login: bool = False + # 登录方式开关:手机验证码这条**默认关掉**。内测期的固定验证码等于"知道手机号就能进任意账号", + # 关掉后 /auth/sms/send 与 /auth/login 统一回 2017,登录走「手机号 / 邮箱 + 密码」。 + # 将来接上真短信通道把它打开即可,登录页会按 /auth/methods 自动列出可用的方式。 + sms_login_enabled: bool = False + + # 平台管理员:能改系统设置(SMTP 等)。按手机号白名单,不挂工作区角色—— + # 系统设置是**跨租户**的,某个工作区的 owner 也不该看到平台的发信配置。 + # `NoDecode` + 下面的 before-validator:这个值环境变量里是逗号分隔的一串, + # 不让 pydantic-settings 先按 JSON 解析(那样 `1360...,1390...` 会直接启动失败)。 + platform_admin_phones: Annotated[list[str], NoDecode] = Field( + default_factory=lambda: ["13605513683"] + ) + + # ── 邮件(SMTP)──────────────────────────────────────── + # 以「系统设置」页里存的值为准(DB),这里只是首次启动前的兜底。 + # 改 SMTP 不该要人登服务器改 env 再重启——所以真配置在 DB 里(见 services/mail.py)。 + smtp_host: str | None = None + smtp_port: int = 465 + smtp_username: str | None = None + smtp_password: str | None = None + smtp_from_name: str = "达道Task" + # 465 走 SSL,587 走 STARTTLS;126/163 这类用 465 + SSL + smtp_use_ssl: bool = True + smtp_timeout_seconds: int = 10 # ── 幂等 ────────────────────────────────────────────── idempotency_enabled: bool = True @@ -117,10 +141,10 @@ class Settings(BaseSettings): build_commit: str = "unknown" build_time: str = "unknown" - @field_validator("cors_origins", mode="before") + @field_validator("cors_origins", "platform_admin_phones", mode="before") @classmethod def _split_origins(cls, value: object) -> object: - """支持 CORS_ORIGINS="a,b" 这种写法。""" + """支持 CORS_ORIGINS="a,b" 这种写法(平台管理员白名单同理)。""" if isinstance(value, str) and not value.startswith("["): return [item.strip() for item in value.split(",") if item.strip()] return value @@ -134,10 +158,10 @@ class Settings(BaseSettings): problems.append("JWT_SECRET 仍是开发默认值或长度不足 32") if "dadao_dev_pw" in self.database_url: problems.append("DATABASE_URL 仍在用开发默认口令") - if self.sms_provider == "dev" and not self.internal_test_login: + if self.sms_login_enabled and self.sms_provider == "dev": problems.append( - "生产环境不允许 SMS_PROVIDER=dev(任意验证码可登录);" - "内网试用确需固定验证码时显式设置 INTERNAL_TEST_LOGIN=true" + "短信验证码登录开着(SMS_LOGIN_ENABLED=true),但 SMS_PROVIDER=dev 只会发固定验证码" + "(等于知道手机号就能进);接真短信通道之前请把 SMS_LOGIN_ENABLED 关掉" ) if problems: raise RuntimeError("配置校验失败:" + ";".join(problems)) diff --git a/backend/app/deps.py b/backend/app/deps.py index a8650ac..987a672 100644 --- a/backend/app/deps.py +++ b/backend/app/deps.py @@ -14,6 +14,7 @@ from fastapi import Depends, Header, Path from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession +from .config import get_settings from .db import bind_tenant, bind_user, get_session from .errors import AppError, ErrorCode from .logging_setup import user_id_ctx, workspace_id_ctx @@ -112,3 +113,18 @@ def require_role(minimum: str): OwnerDep = Annotated[TenantCtx, Depends(require_role("owner"))] AdminDep = Annotated[TenantCtx, Depends(require_role("admin"))] + + +async def platform_admin(user: CurrentUser) -> AuthUser: + """平台管理员:能改 SMTP 这类**跨租户**的系统设置。 + + 刻意不复用工作区角色:某个工作区的 owner 只说明他管得了自己的工作区, + 不代表他能看到整台服务的发信账号(那里面存着别人的授权码)。 + 名单来自配置 `PLATFORM_ADMIN_PHONES`,换人不用发版。 + """ + if user.phone not in get_settings().platform_admin_phones: + raise AppError(ErrorCode.INSUFFICIENT_ROLE, "只有平台管理员能改系统设置") + return user + + +PlatformAdminDep = Annotated[AuthUser, Depends(platform_admin)] diff --git a/backend/app/errors.py b/backend/app/errors.py index 4b320fd..9ca9538 100644 --- a/backend/app/errors.py +++ b/backend/app/errors.py @@ -29,6 +29,10 @@ class ErrorCode(IntEnum): PASSWORD_NOT_SET = 2014 PASSWORD_WEAK = 2015 LOGIN_TOO_MANY = 2016 + LOGIN_METHOD_DISABLED = 2017 + EMAIL_INVALID = 2018 + EMAIL_TAKEN = 2019 + MAIL_SEND_FAILED = 2020 # 3xxx 租户 / 权限 WORKSPACE_NOT_FOUND = 3001 @@ -94,6 +98,10 @@ _HTTP_STATUS: dict[ErrorCode, int] = { ErrorCode.PASSWORD_NOT_SET: 400, ErrorCode.PASSWORD_WEAK: 422, ErrorCode.LOGIN_TOO_MANY: 429, + ErrorCode.LOGIN_METHOD_DISABLED: 403, + ErrorCode.EMAIL_INVALID: 422, + ErrorCode.EMAIL_TAKEN: 409, + ErrorCode.MAIL_SEND_FAILED: 502, ErrorCode.WORKSPACE_NOT_FOUND: 404, ErrorCode.NOT_A_MEMBER: 403, ErrorCode.INSUFFICIENT_ROLE: 403, diff --git a/backend/app/main.py b/backend/app/main.py index 8a75606..9c66de7 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -17,6 +17,7 @@ from starlette.staticfiles import StaticFiles from starlette.types import Scope from .api import app_release, attachments, auth, items, knowledge, tickets, workspaces +from .api import settings as settings_api from .config import get_settings from .db import SessionFactory, current_app_role, engine from .errors import AppError, ErrorCode, http_status_for @@ -31,9 +32,9 @@ logger = get_logger("app") @asynccontextmanager async def lifespan(app: FastAPI): settings.validate_runtime() - if settings.env == "prod" and settings.internal_test_login: + if settings.env == "prod" and settings.sms_login_enabled: logger.warning( - "内测登录已开启:任意手机号可用固定验证码登录,只能在内网访问,切勿暴露公网", + "短信验证码登录开着,只能配真通道;用 dev 固定码等于知道手机号就能进任何账号", extra={"extra_fields": {"sms_provider": settings.sms_provider}}, ) logger.info( @@ -116,6 +117,7 @@ app.include_router(tickets.notify_router, prefix=settings.api_prefix) app.include_router(knowledge.router, prefix=settings.api_prefix) app.include_router(attachments.router, prefix=settings.api_prefix) app.include_router(app_release.router, prefix=settings.api_prefix) +app.include_router(settings_api.router, prefix=settings.api_prefix) @app.get("/health", tags=["运维"], summary="存活探针") diff --git a/backend/app/models.py b/backend/app/models.py index 0906a54..7b3d6eb 100644 --- a/backend/app/models.py +++ b/backend/app/models.py @@ -47,6 +47,25 @@ class AppUser(Base, Timestamps): status: Mapped[str] = mapped_column(String(16), nullable=False, default="active") # 登录密码(scrypt 串,见 security.hash_password)。为空表示只用验证码登录。 password_hash: Mapped[str | None] = mapped_column(String(255)) + # 邮箱:既是「邮箱 + 密码」登录的账号名,也是以后找回密码/发通知的去处。 + # 可空(老用户还没有),唯一性由迁移里的 lower(email) 部分唯一索引保证。 + email: Mapped[str | None] = mapped_column(String(255)) + + +class SystemSetting(Base, Timestamps): + """平台级键值设置(SMTP 等),**不挂租户、没有 RLS**。 + + 刻意不做成租户表:发信账号是整台服务共用的,某个工作区的 owner 不该看到 + 平台的 SMTP 授权码。写权限由 API 层的「平台管理员」依赖把关(见 deps.py)。 + """ + + __tablename__ = "system_setting" + + key: Mapped[str] = mapped_column(String(64), primary_key=True) + value: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict) + updated_by: Mapped[uuid.UUID | None] = mapped_column( + PgUUID(as_uuid=True), ForeignKey("app_user.id", ondelete="SET NULL") + ) class Workspace(Base, Timestamps): diff --git a/backend/app/services/mail.py b/backend/app/services/mail.py new file mode 100644 index 0000000..1ce8703 --- /dev/null +++ b/backend/app/services/mail.py @@ -0,0 +1,202 @@ +"""发信(SMTP)。 + +三个刻意的取舍: + +1. **配置以数据库里的为准**。发信账号是平台级的运维参数,改它不该要人登服务器 + 改 env 再重启;所以「系统设置」页写库,这里每次读库、读不到才回落到环境变量。 +2. **只用标准库 smtplib**。发信不是性能路径,引一个三方 SDK 换来的只是多一条升级债; + SSL / STARTTLS 两种握手都覆盖了(465 走 SSL,587 走 STARTTLS)。 +3. **失败要能说清是哪种失败**。连不上、认证不过、被对方拒收,对使用者是三件不同的 + 事;统一报"发信失败"会让人只能去翻服务器日志。所以异常分类后带进错误码 2020。 +""" + +from __future__ import annotations + +import asyncio +import contextlib +import smtplib +import ssl +from dataclasses import dataclass +from email.header import Header +from email.message import EmailMessage +from email.utils import formataddr, formatdate + +from sqlalchemy.ext.asyncio import AsyncSession + +from ..config import get_settings +from ..errors import AppError, ErrorCode +from ..models import SystemSetting + +SMTP_KEY = "smtp" +# 存库的字段名与对外字段一致,避免来回翻译出现第三个名字 +SMTP_FIELDS = ("host", "port", "username", "password", "from_name", "use_ssl") + + +@dataclass(frozen=True) +class SmtpConfig: + host: str + port: int + username: str + password: str + from_name: str = "达道Task" + use_ssl: bool = True + + @property + def sender(self) -> str: + return formataddr((str(Header(self.from_name, "utf-8")), self.username)) + + @property + def configured(self) -> bool: + return bool(self.host and self.username and self.password) + + +def _from_settings() -> SmtpConfig | None: + s = get_settings() + if not (s.smtp_host and s.smtp_username and s.smtp_password): + return None + return SmtpConfig( + host=s.smtp_host, + port=s.smtp_port, + username=s.smtp_username, + password=s.smtp_password, + from_name=s.smtp_from_name, + use_ssl=s.smtp_use_ssl, + ) + + +async def load_config(session: AsyncSession) -> SmtpConfig | None: + """先看库里有没有人配过,没有再回落到环境变量。""" + row = await session.get(SystemSetting, SMTP_KEY) + data = dict(row.value or {}) if row else {} + if not (data.get("host") and data.get("username") and data.get("password")): + return _from_settings() + + return SmtpConfig( + host=str(data["host"]), + port=int(data.get("port") or 465), + username=str(data["username"]), + # 授权码里可能有多余空格,粘贴时最常见的就是把尾巴带上 + password=str(data["password"]).strip(), + from_name=str(data.get("from_name") or "达道Task"), + use_ssl=bool(data.get("use_ssl", True)), + ) + + +async def save_config(session: AsyncSession, *, values: dict, updated_by) -> SmtpConfig: + """写库。password 传空表示"沿用原来的",不传等于没改。""" + row = await session.get(SystemSetting, SMTP_KEY) + current = dict(row.value or {}) if row else {} + merged = {**current, **{k: v for k, v in values.items() if v is not None}} + if not values.get("password"): + merged["password"] = current.get("password", "") + + if not (merged.get("host") and merged.get("username") and merged.get("password")): + raise AppError(ErrorCode.VALIDATION_FAILED, "SMTP 服务器、账号、授权码都要填") + + if row is None: + row = SystemSetting(key=SMTP_KEY, value=merged, updated_by=updated_by) + session.add(row) + else: + row.value = merged + row.updated_by = updated_by + + await session.flush() + cfg = SmtpConfig( + host=str(merged["host"]), + port=int(merged.get("port") or 465), + username=str(merged["username"]), + password=str(merged["password"]).strip(), + from_name=str(merged.get("from_name") or "达道Task"), + use_ssl=bool(merged.get("use_ssl", True)), + ) + return cfg + + +def _send_sync(cfg: SmtpConfig, to: str, subject: str, text: str, html: str | None) -> None: + msg = EmailMessage() + msg["Subject"] = str(Header(subject, "utf-8")) + msg["From"] = cfg.sender + msg["To"] = to + msg["Date"] = formatdate(localtime=True) + msg.set_content(text) + if html: + msg.add_alternative(html, subtype="html") + + s = get_settings() + timeout = s.smtp_timeout_seconds + context = ssl.create_default_context() + if cfg.use_ssl: + server: smtplib.SMTP = smtplib.SMTP_SSL( + cfg.host, cfg.port, timeout=timeout, context=context + ) + else: + server = smtplib.SMTP(cfg.host, cfg.port, timeout=timeout) + server.starttls(context=context) + try: + server.login(cfg.username, cfg.password) + server.send_message(msg) + finally: + # 信已经发出去了,QUIT 失败不该把成功回报成失败 + with contextlib.suppress(Exception): + server.quit() + + +async def send_mail( + session_or_cfg: AsyncSession | SmtpConfig, + *, + to: str, + subject: str, + text: str, + html: str | None = None, +) -> None: + """发一封纯文本(可带 HTML 替代体)的信。失败一律抛 2020,并说清是哪一步。""" + cfg = ( + await load_config(session_or_cfg) + if isinstance(session_or_cfg, AsyncSession) + else session_or_cfg + ) + if cfg is None or not cfg.configured: + raise AppError(ErrorCode.MAIL_SEND_FAILED, "还没有配置发信邮箱,请先在系统设置里填 SMTP") + + try: + await asyncio.to_thread(_send_sync, cfg, to, subject, text, html) + except smtplib.SMTPAuthenticationError as exc: + raise AppError( + ErrorCode.MAIL_SEND_FAILED, + "SMTP 认证失败:账号或授权码不对(126/163 要用客户端授权码,不是登录密码)", + ) from exc + except smtplib.SMTPRecipientsRefused as exc: + raise AppError(ErrorCode.MAIL_SEND_FAILED, f"收件地址被拒绝:{to}") from exc + except (smtplib.SMTPException, OSError) as exc: + raise AppError(ErrorCode.MAIL_SEND_FAILED, f"发信失败:{exc}") from exc + + +async def config_payload(session: AsyncSession) -> dict: + """给设置页看的形状:授权码只回"设没设",不回原值。""" + row = await session.get(SystemSetting, SMTP_KEY) + data = dict(row.value or {}) if row else {} + cfg = await load_config(session) + if cfg is None: + return { + "host": data.get("host") or "", + "port": int(data.get("port") or 465), + "username": data.get("username") or "", + "password_set": bool(data.get("password")), + "from_name": data.get("from_name") or "达道Task", + "use_ssl": bool(data.get("use_ssl", True)), + "configured": False, + "source": "none", + "updated_at": row.updated_at if row else None, + } + + return { + "host": cfg.host, + "port": cfg.port, + "username": cfg.username, + "password_set": True, + "from_name": cfg.from_name, + "use_ssl": cfg.use_ssl, + "configured": cfg.configured, + "source": "db" if row else "env", + "updated_at": row.updated_at if row else None, + } diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 99f9c33..f7fb496 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -13,6 +13,9 @@ os.environ["ENV"] = "test" os.environ.setdefault("SMS_DEV_CODE", "123456") # 测试里关掉发码节流,否则"同一手机号再登录一次"要等 60 秒 os.environ.setdefault("SMS_THROTTLE_SECONDS", "0") +# 线上默认关掉了短信验证码登录(固定码等于谁都能进),但测试夹具 `login()` 靠它批量造用户。 +# 这里显式打开;想验证"关掉之后回 2017"的用例自己 monkeypatch 一下 settings 即可。 +os.environ.setdefault("SMS_LOGIN_ENABLED", "true") # 测试库由 config 的 test_database_url / test_migration_database_url 决定(见 backend/.env), # 这里不再改 os.environ —— 配置对象自己会读 .env。 @@ -36,7 +39,7 @@ from app.stores import reset_store_for_tests settings = get_settings() DEV_CODE = settings.sms_dev_code -_TABLES = "audit_log, invitation, member, workspace, app_user" +_TABLES = "system_setting, audit_log, invitation, member, workspace, app_user" def _run_migrations() -> None: diff --git a/backend/tests/test_account.py b/backend/tests/test_account.py index 4878401..83dabb2 100644 --- a/backend/tests/test_account.py +++ b/backend/tests/test_account.py @@ -29,9 +29,11 @@ async def test_me_reports_profile_without_leaking_password(client: AsyncClient) assert set(data["user"]) == { "id", "phone", + "email", "nickname", "avatar_url", "has_password", + "platform_admin", "created_at", } diff --git a/backend/tests/test_config_prod.py b/backend/tests/test_config_prod.py index 11ce030..554383b 100644 --- a/backend/tests/test_config_prod.py +++ b/backend/tests/test_config_prod.py @@ -1,6 +1,8 @@ """生产配置校验:固定验证码必须显式开关,否则启动即失败。 这两条是「部署纪律」的守门员:生产一旦误用 dev 验证码,等于任意手机号可登录。 +现在的规则更简单——**短信验证码登录默认关着**,关着时 SMS_PROVIDER 是 dev 也无所谓, +因为那条路根本不通;只有在 SMS_LOGIN_ENABLED=true 时才要求真通道。 """ from __future__ import annotations @@ -24,14 +26,18 @@ def _prod(**overrides: object) -> Settings: return Settings(**values) -def test_prod_rejects_dev_sms_without_switch() -> None: - with pytest.raises(RuntimeError, match="SMS_PROVIDER=dev"): - _prod(sms_provider="dev").validate_runtime() +def test_prod_rejects_dev_sms_when_login_enabled() -> None: + with pytest.raises(RuntimeError, match="SMS_LOGIN_ENABLED"): + _prod(sms_provider="dev", sms_login_enabled=True).validate_runtime() -def test_prod_allows_dev_sms_with_internal_test_login() -> None: - # 内测模式:显式开关后放行,启动时 main.lifespan 会打 WARNING - _prod(sms_provider="dev", internal_test_login=True).validate_runtime() +def test_prod_is_fine_with_sms_login_closed() -> None: + # 默认就是这条:短信登录关着,provider 配成 dev 也不会有人能用它进来 + _prod(sms_provider="dev", sms_login_enabled=False).validate_runtime() + + +def test_prod_allows_real_sms_provider_when_enabled() -> None: + _prod(sms_provider="aliyun", sms_login_enabled=True).validate_runtime() def test_prod_still_rejects_weak_jwt_secret() -> None: diff --git a/backend/tests/test_login_email.py b/backend/tests/test_login_email.py new file mode 100644 index 0000000..8f42eaa --- /dev/null +++ b/backend/tests/test_login_email.py @@ -0,0 +1,131 @@ +"""登录方式的开关,以及用邮箱登录。 + +三条是这个功能的重点,也是测试的重点: + +1. **短信验证码能整体关掉**。关掉后连"发码"这一步都不该通——否则等于留了个后门: + 内置验证码仍然对得上,只是没人去点。 +2. **邮箱是账号名,不是联系方式**:绑定之后能用它登录,改绑立刻生效、解绑立刻失效。 +3. **邮箱唯一且大小写不敏感**:`Shufen@126.com` 和 `shufen@126.com` 是同一个人, + 不能让第二个账号绑走。 +""" + +from __future__ import annotations + +from httpx import AsyncClient + +from app.config import get_settings + +from .conftest import login, unwrap + +settings = get_settings() + + +async def _set_password(client: AsyncClient, user: dict, password: str) -> None: + unwrap( + await client.post( + "/api/v1/auth/password", json={"password": password}, headers=user["headers"] + ) + ) + + +async def _bind_email(client: AsyncClient, user: dict, email: str) -> dict: + return unwrap( + await client.patch("/api/v1/auth/me", json={"email": email}, headers=user["headers"]) + ) + + +async def test_methods_lists_what_is_open(client: AsyncClient) -> None: + data = unwrap(await client.get("/api/v1/auth/methods")) + assert data["password"] is True + assert data["email_password"] is True + # 测试环境把短信开着(夹具要靠它造用户);线上默认是 false + assert data["sms_code"] is True + + +async def test_sms_login_can_be_closed(client: AsyncClient, monkeypatch) -> None: + monkeypatch.setattr(settings, "sms_login_enabled", False) + + methods = unwrap(await client.get("/api/v1/auth/methods")) + assert methods["sms_code"] is False + + sent = await client.post("/api/v1/auth/sms/send", json={"phone": "13800138000"}) + assert sent.json()["code"] == 2017 + + # 就算手里还捏着旧验证码,登录这一步也必须关死 + logged = await client.post( + "/api/v1/auth/login", json={"phone": "13800138000", "code": settings.sms_dev_code} + ) + assert logged.json()["code"] == 2017 + + +async def test_bind_email_and_login_with_it(client: AsyncClient) -> None: + user = await login(client) + await _set_password(client, user, "Dadao2026pw") + + data = await _bind_email(client, user, " Shufen@126.com ") + # 存的是小写,避免大小写绕出第二个账号 + assert data["user"]["email"] == "shufen@126.com" + + logged = unwrap( + await client.post( + "/api/v1/auth/login/password", + json={"email": "SHUFEN@126.COM", "password": "Dadao2026pw"}, + ) + ) + assert logged["user"]["id"] == user["user_id"] + + +async def test_email_login_rejects_wrong_password(client: AsyncClient) -> None: + user = await login(client) + await _set_password(client, user, "Dadao2026pw") + await _bind_email(client, user, "shufen@126.com") + + resp = await client.post( + "/api/v1/auth/login/password", json={"email": "shufen@126.com", "password": "nope-nope-1"} + ) + assert resp.json()["code"] == 2013 + + +async def test_email_is_validated_and_unique(client: AsyncClient) -> None: + first = await login(client) + bad = await client.patch( + "/api/v1/auth/me", json={"email": "not-an-email"}, headers=first["headers"] + ) + assert bad.json()["code"] == 2018 + + await _bind_email(client, first, "shufen@126.com") + + second = await login(client) + taken = await client.patch( + "/api/v1/auth/me", json={"email": "SHUFEN@126.com"}, headers=second["headers"] + ) + assert taken.json()["code"] == 2019 + + +async def test_unbind_email_then_login_by_email_fails(client: AsyncClient) -> None: + user = await login(client) + await _set_password(client, user, "Dadao2026pw") + await _bind_email(client, user, "shufen@126.com") + + cleared = await _bind_email(client, user, "") + assert cleared["user"]["email"] is None + + resp = await client.post( + "/api/v1/auth/login/password", + json={"email": "shufen@126.com", "password": "Dadao2026pw"}, + ) + assert resp.json()["code"] == 2013 + + +async def test_phone_login_still_works(client: AsyncClient) -> None: + """老客户端/安卓只发 phone,这条路不能因为加了邮箱就断。""" + user = await login(client) + await _set_password(client, user, "Dadao2026pw") + + logged = unwrap( + await client.post( + "/api/v1/auth/login/password", + json={"phone": user["phone"], "password": "Dadao2026pw"}, + ) + ) + assert logged["user"]["id"] == user["user_id"] diff --git a/backend/tests/test_settings_smtp.py b/backend/tests/test_settings_smtp.py new file mode 100644 index 0000000..1ea6432 --- /dev/null +++ b/backend/tests/test_settings_smtp.py @@ -0,0 +1,130 @@ +"""系统设置(SMTP):只有平台管理员能改,授权码不回显,改完立刻生效。 + +为什么值得单独测:这是全站唯一一个**跨租户**的写接口。租户隔离测试管不到它, +一旦漏了权限判断,任何登录用户都能改掉全平台发信账号(等于劫持找回密码邮件)。 +""" + +from __future__ import annotations + +from httpx import AsyncClient + +from app.config import get_settings +from app.services import mail + +from .conftest import login, unwrap + +settings = get_settings() + +SMTP = { + "host": "smtp.126.com", + "port": 465, + "username": "shufenhf@126.com", + "password": "CH46ngqQ7Z2XE2eZ", + "from_name": "达道Task", + "use_ssl": True, +} + + +async def _admin(client: AsyncClient) -> dict: + """白名单里的手机号登录,就是平台管理员。""" + user = await login(client, phone="13605513683") + return user + + +async def test_settings_require_platform_admin(client: AsyncClient, monkeypatch) -> None: + monkeypatch.setattr(settings, "platform_admin_phones", ["13605513683"]) + outsider = await login(client) + + read = await client.get("/api/v1/settings/smtp", headers=outsider["headers"]) + assert read.json()["code"] == 3004 + + write = await client.put("/api/v1/settings/smtp", json=SMTP, headers=outsider["headers"]) + assert write.json()["code"] == 3004 + + +async def test_platform_admin_flag_comes_back_in_me(client: AsyncClient, monkeypatch) -> None: + monkeypatch.setattr(settings, "platform_admin_phones", ["13605513683"]) + admin = await _admin(client) + outsider = await login(client) + + me_admin = unwrap(await client.get("/api/v1/auth/me", headers=admin["headers"])) + me_outsider = unwrap(await client.get("/api/v1/auth/me", headers=outsider["headers"])) + assert me_admin["user"]["platform_admin"] is True + assert me_outsider["user"]["platform_admin"] is False + + +async def test_save_smtp_hides_password_and_persists(client: AsyncClient, monkeypatch) -> None: + monkeypatch.setattr(settings, "platform_admin_phones", ["13605513683"]) + admin = await _admin(client) + + empty = unwrap(await client.get("/api/v1/settings/smtp", headers=admin["headers"])) + assert empty["configured"] is False + + saved = unwrap(await client.put("/api/v1/settings/smtp", json=SMTP, headers=admin["headers"])) + assert saved["configured"] is True + assert saved["source"] == "db" + assert saved["host"] == "smtp.126.com" + assert saved["password_set"] is True + # 授权码一个字节都不能回给页面 + assert "password" not in saved + assert "CH46ngqQ7Z2XE2eZ" not in str(saved) + + again = unwrap(await client.get("/api/v1/settings/smtp", headers=admin["headers"])) + assert again["username"] == "shufenhf@126.com" + assert again["port"] == 465 + + +async def test_saving_without_password_keeps_old_one(client: AsyncClient, monkeypatch) -> None: + """授权码留空 = 沿用原来的。否则每次改端口都得重新粘贴一遍授权码。""" + monkeypatch.setattr(settings, "platform_admin_phones", ["13605513683"]) + admin = await _admin(client) + await client.put("/api/v1/settings/smtp", json=SMTP, headers=admin["headers"]) + + payload = {**SMTP, "port": 587, "use_ssl": False, "password": ""} + resp = await client.put("/api/v1/settings/smtp", json=payload, headers=admin["headers"]) + saved = unwrap(resp) + assert saved["port"] == 587 + assert saved["password_set"] is True + + from app.db import SessionFactory + + async with SessionFactory() as session: + cfg = await mail.load_config(session) + assert cfg is not None + assert cfg.password == "CH46ngqQ7Z2XE2eZ" + assert cfg.port == 587 + + +async def test_test_mail_reports_missing_config(client: AsyncClient, monkeypatch) -> None: + monkeypatch.setattr(settings, "platform_admin_phones", ["13605513683"]) + admin = await _admin(client) + resp = await client.post( + "/api/v1/settings/smtp/test", json={"to": "steven@example.com"}, headers=admin["headers"] + ) + assert resp.json()["code"] == 2020 + + +async def test_test_mail_actually_sends(client: AsyncClient, monkeypatch) -> None: + """真发信在这里被替换掉——测的是"取到配置、走对收件人",不是 SMTP 本身。""" + monkeypatch.setattr(settings, "platform_admin_phones", ["13605513683"]) + admin = await _admin(client) + await client.put("/api/v1/settings/smtp", json=SMTP, headers=admin["headers"]) + + sent: list[tuple] = [] + + def fake_send(cfg, to, subject, text, html): # noqa: ANN001 - 与真实签名一致 + sent.append((cfg.host, cfg.username, to, subject, text)) + + monkeypatch.setattr(mail, "_send_sync", fake_send) + + data = unwrap( + await client.post( + "/api/v1/settings/smtp/test", + json={"to": "steven@example.com"}, + headers=admin["headers"], + ) + ) + assert data["sent"] is True + assert data["to"] == "steven@example.com" + assert sent and sent[0][0] == "smtp.126.com" + assert sent[0][1] == "shufenhf@126.com" diff --git a/web/e2e/login-email-smtp.mjs b/web/e2e/login-email-smtp.mjs new file mode 100644 index 0000000..8117698 --- /dev/null +++ b/web/e2e/login-email-smtp.mjs @@ -0,0 +1,221 @@ +/** + * 登录方式与系统设置的验收:短信关着、邮箱能登录、SMTP 后台可配。 + * + * 三个都要真跑,因为这三件事全是"接口回 200 但人用不了"的高危区: + * - 短信关着,登录页就不能出现「验证码」这一档(不然用户点进去只会看到 2017); + * - 邮箱 + 密码要能真的登进来,不是只把邮箱存进库; + * - SMTP 存进库之后要能立刻发信,别等到真要用的时候才发现授权码是错的。 + * + * 授权码不进仓库:发信那一步只在给了 SMTP_PASS 环境变量时才跑。 + */ +import { chromium } from "playwright-core"; +import { mkdirSync, readFileSync } from "node:fs"; + +const WEB = process.env.WEB ?? "http://127.0.0.1:5180"; +const API = process.env.API ?? "http://127.0.0.1:8100/api/v1"; +const PHONE = process.env.PHONE ?? "13900000001"; +const PWD_FILE = new URL("../../.local/e2e-account-password.txt", import.meta.url); +const OUT = "e2e/artifacts"; + +const SMTP_HOST = process.env.SMTP_HOST ?? "smtp.126.com"; +const SMTP_USER = process.env.SMTP_USER ?? ""; +const SMTP_PASS = process.env.SMTP_PASS ?? ""; + +let pass = 0; +let fail = 0; +function check(name, ok, extra = "") { + if (ok) { + pass += 1; + console.log(`PASS ${name}`); + } else { + fail += 1; + console.log(`FAIL ${name} ${extra}`); + } +} + +function savedPassword() { + try { + return readFileSync(PWD_FILE, "utf8").trim() || null; + } catch { + return null; + } +} + +async function post(path, body, token) { + const r = await fetch(`${API}${path}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + ...(token ? { Authorization: `Bearer ${token}` } : {}), + }, + body: JSON.stringify(body ?? {}), + }); + return r.json(); +} + +async function get(path, token) { + const r = await fetch(`${API}${path}`, { + headers: token ? { Authorization: `Bearer ${token}` } : {}, + }); + return r.json(); +} + +async function patch(path, body, token) { + const r = await fetch(`${API}${path}`, { + method: "PATCH", + headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` }, + body: JSON.stringify(body), + }); + return r.json(); +} + +async function main() { + mkdirSync(OUT, { recursive: true }); + const browser = await chromium.launch({ + executablePath: + process.env.CHROME ?? + `${process.env.LOCALAPPDATA}\\ms-playwright\\chromium-1223\\chrome-win64\\chrome.exe`, + }); + const page = await browser.newPage({ viewport: { width: 1440, height: 960 } }); + const errors = []; + page.on("console", (m) => m.type() === "error" && errors.push(m.text())); + page.on("pageerror", (e) => errors.push(String(e))); + + const password = savedPassword(); + + // ① 服务端说清楚现在开着哪几条路 + const methods = await get("/auth/methods"); + check( + "① /auth/methods 说短信关着、密码与邮箱密码开着", + methods.code === 0 && + methods.data.password === true && + methods.data.email_password === true && + methods.data.sms_code === false, + JSON.stringify(methods.data), + ); + + // ② 关着的那条路真的挡住了 + const sms = await post("/auth/sms/send", { phone: PHONE }); + check("② 发验证码的接口回 2017(不是静默成功)", sms.code === 2017, JSON.stringify(sms)); + + // ③ 登录页不该再出现「验证码」这一档 + await page.goto(`${WEB}/login`); + await page.waitForSelector("#account"); + const codeTab = await page.getByRole("button", { name: "验证码", exact: true }).count(); + const emailTab = await page.getByRole("tab", { name: "邮箱" }).count(); + const pwdInput = await page.locator("#password").count(); + check("③ 登录页没有验证码那一档、有邮箱档与密码框", codeTab === 0 && emailTab === 1 && pwdInput === 1); + + // ④ 手机号 + 密码,从界面登录进去 + let loggedIn = false; + if (password) { + await page.getByLabel("手机号").fill(PHONE); + await page.locator("#password").fill(password); + await page.getByRole("button", { name: "登录", exact: true }).click(); + loggedIn = await page + .waitForURL(`${WEB}/`, { timeout: 8000 }) + .then(() => true) + .catch(() => false); + } + check("④ 手机号 + 密码能从登录页进首页", loggedIn, "(缺 .local/e2e-account-password.txt 时跳过)"); + + const tokens = loggedIn + ? await page.evaluate(() => localStorage.getItem("dadao.access")) + : (await post("/auth/login/password", { phone: PHONE, password })).data?.tokens?.access_token; + + // ⑤ 绑定邮箱,然后**用邮箱登录** + const email = `dadao-e2e-${Date.now()}@example.com`; + const bind = await patch("/auth/me", { email }, tokens); + check("⑤ 账号页能绑邮箱", bind.code === 0 && bind.data.user.email === email, JSON.stringify(bind)); + + const byEmail = await post("/auth/login/password", { email: email.toUpperCase(), password }); + const emailLogin = await post("/auth/login/password", { email, password }); + check( + "⑥ 邮箱 + 密码能登录(大小写不敏感)", + emailLogin.code === 0 && emailLogin.data?.tokens?.access_token, + JSON.stringify(emailLogin), + ); + check("⑥b 全大写邮箱也能登录", byEmail.code === 0, JSON.stringify(byEmail)); + + // ⑦ 解绑之后这条路就该关掉,而不是留个后门 + const unbind = await patch("/auth/me", { email: "" }, tokens); + const afterUnbind = await post("/auth/login/password", { email, password }); + check( + "⑦ 解绑邮箱后邮箱登录回 2013", + unbind.code === 0 && unbind.data.user.email === null && afterUnbind.code === 2013, + JSON.stringify(afterUnbind), + ); + + // ⑧ 平台管理员才看得到「系统设置」 + const me = await get("/auth/me", tokens); + check("⑧ 当前账号被标成平台管理员", me.data?.user?.platform_admin === true, JSON.stringify(me.data?.user)); + await page.goto(`${WEB}/account`); + await page.waitForSelector('input[aria-label="昵称"]'); + // 侧栏按 /auth/me 的 platform_admin 决定要不要渲染这一条,等它落下来再数 + const settingsLink = await page + .waitForFunction(() => document.querySelectorAll('aside a[href="/settings"]').length, { + timeout: 5000, + }) + .then((handle) => handle.jsonValue()) + .catch(() => 0); + check("⑧b 侧栏里有「系统设置」入口", settingsLink === 1, `count=${settingsLink}`); + await page.screenshot({ path: `${OUT}/settings-entry.png` }); + + // ⑨ 系统设置页能读、能存;授权码只写不读 + await page.goto(`${WEB}/settings`); + await page.waitForSelector('input[aria-label="服务器地址"]'); + const before = await get("/settings/smtp", tokens); + check("⑨ 系统设置页读得到当前配置", before.code === 0 && before.data.password_set !== undefined); + + if (SMTP_PASS) { + await page.getByLabel("服务器地址").fill(SMTP_HOST); + await page.getByLabel("端口").fill("465"); + await page.locator('input[aria-label="账号"]').fill(SMTP_USER); + await page.getByLabel("授权码").fill(SMTP_PASS); + await page.getByRole("button", { name: "保存", exact: true }).click(); + await page.waitForTimeout(1200); + const saved = await get("/settings/smtp", tokens); + check( + "⑩ 授权码存进库了,但接口不回显", + saved.data?.password_set === true && + saved.data?.configured === true && + !JSON.stringify(saved.data).includes(SMTP_PASS), + JSON.stringify(saved.data), + ); + + // ⑪ 真发一封,确认这条通道是通的(不是"存了个假配置") + const sent = await post("/settings/smtp/test", { to: SMTP_USER }, tokens); + check("⑪ 测试邮件发送成功", sent.code === 0, JSON.stringify(sent)); + if (sent.code !== 0) { + console.log(` 发信失败原文:${sent.message}`); + } + await page.screenshot({ path: `${OUT}/settings-smtp.png` }); + } else { + console.log("SKIP ⑩⑪ 没给 SMTP_PASS,跳过保存与发信"); + } + + // ⑫ 账号页上的邮箱框要能回填刚绑的值(说明前端读的是接口,不是本地缓存) + const rebind = await patch("/auth/me", { email }, tokens); + await page.goto(`${WEB}/account`); + await page.waitForSelector('input[aria-label="邮箱"]'); + const emailInput = await page.waitForFunction( + () => { + const el = document.querySelector('input[aria-label="邮箱"]'); + return el && el.value.includes("@") ? el.value : null; + }, + { timeout: 5000 }, + ); + const shownEmail = await emailInput.jsonValue(); + check("⑫ 账号页回填刚绑的邮箱", rebind.code === 0 && shownEmail === email, shownEmail); + + check("⑬ 控制台零报错", errors.length === 0, errors.slice(0, 2).join(" | ")); + + await browser.close(); + console.log(`\n${fail === 0 ? "ALL PASS" : "SOME FAILED"} — pass ${pass}, fail ${fail}`); + process.exit(fail === 0 ? 0 : 1); +} + +main().catch((err) => { + console.error("脚本异常", err); + process.exit(1); +}); diff --git a/web/e2e/shots-account-login.mjs b/web/e2e/shots-account-login.mjs new file mode 100644 index 0000000..00e84db --- /dev/null +++ b/web/e2e/shots-account-login.mjs @@ -0,0 +1,59 @@ +/** + * 拍两张文档用的截图:登录页(两种账号名 + 密码)、账号页(邮箱)、系统设置页。 + * 需要前端 5180、后端 8100 起着;账号用 dev 的平台管理员。 + */ +import { chromium } from "playwright-core"; +import { mkdirSync, readFileSync } from "node:fs"; + +const WEB = process.env.WEB ?? "http://127.0.0.1:5180"; +const API = process.env.API ?? "http://127.0.0.1:8100/api/v1"; +const PHONE = process.env.PHONE ?? "13900000001"; +const OUT = "e2e/artifacts"; +const PWD_FILE = new URL("../../.local/e2e-account-password.txt", import.meta.url); + +function savedPassword() { + try { + return readFileSync(PWD_FILE, "utf8").trim(); + } catch { + return ""; + } +} + +const browser = await chromium.launch({ + executablePath: + process.env.CHROME ?? + `${process.env.LOCALAPPDATA}/ms-playwright/chromium-1223/chrome-win64/chrome.exe`, +}); +const page = await browser.newPage({ viewport: { width: 1440, height: 960 } }); +mkdirSync(OUT, { recursive: true }); + +await page.goto(`${WEB}/login`); +await page.waitForSelector("#account"); +await page.screenshot({ path: `${OUT}/login-password.png` }); + +const r = await fetch(`${API}/auth/login/password`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ phone: PHONE, password: savedPassword() }), +}); +const data = await r.json(); +await page.addInitScript( + ([a, rf]) => { + localStorage.setItem("dadao.access", a); + localStorage.setItem("dadao.refresh", rf); + }, + [data.data.tokens.access_token, data.data.tokens.refresh_token], +); + +await page.goto(`${WEB}/account`); +await page.waitForSelector('input[aria-label="邮箱"]'); +await page.waitForTimeout(600); +await page.screenshot({ path: `${OUT}/account-page.png` }); + +await page.goto(`${WEB}/settings`); +await page.waitForSelector('input[aria-label="服务器地址"]'); +await page.waitForTimeout(800); +await page.screenshot({ path: `${OUT}/settings-page.png` }); + +await browser.close(); +console.log("screenshots written to", OUT); diff --git a/web/src/App.tsx b/web/src/App.tsx index 284b61c..42971ee 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -14,6 +14,7 @@ import { KnowledgePage } from "./pages/Knowledge"; import { NotificationsPage } from "./pages/Notifications"; import { JoinPage } from "./pages/Join"; import { AccountPage } from "./pages/Account"; +import { SettingsPage } from "./pages/Settings"; interface AuthState { user: User | null; @@ -90,6 +91,7 @@ export function App() { } /> } /> } /> + } /> } /> } /> } /> diff --git a/web/src/components/SideRail.tsx b/web/src/components/SideRail.tsx index 2e5021d..5adae71 100644 --- a/web/src/components/SideRail.tsx +++ b/web/src/components/SideRail.tsx @@ -1,6 +1,6 @@ import { Link } from "react-router-dom"; import { useAuth } from "../App"; -import { Logout, Logo, Settings } from "./icons"; +import { Logout, Logo, Settings, Sliders } from "./icons"; /** * 工作区里侧栏长什么样,工作区外面(工作区列表、账号设置)就长什么样。 @@ -64,6 +64,16 @@ export function SideRail({ activeId }: { activeId?: string | null }) { 账号设置 + {/* 系统设置是平台级配置(全站共用一份),只给平台管理员看 */} + {user?.platform_admin ? ( + + + 系统设置 + + ) : null}
@@ -94,6 +104,15 @@ export function SideRail({ activeId }: { activeId?: string | null }) { 达道Task
+ {user?.platform_admin ? ( + + + + ) : null} ( ); +export const Sliders = (p: IconProps) => ( + + + + + +); + export const User = (p: IconProps) => ( diff --git a/web/src/lib/client.ts b/web/src/lib/client.ts index 51f6d30..8c23120 100644 --- a/web/src/lib/client.ts +++ b/web/src/lib/client.ts @@ -125,6 +125,7 @@ export const api = { get: (path: string, signal?: AbortSignal) => raw(path, { signal }), post: (path: string, body?: unknown) => raw(path, { method: "POST", body }), patch: (path: string, body?: unknown) => raw(path, { method: "PATCH", body }), + put: (path: string, body?: unknown) => raw(path, { method: "PUT", body }), del: (path: string) => raw(path, { method: "DELETE" }), }; diff --git a/web/src/lib/types.ts b/web/src/lib/types.ts index 0bbaab6..bc056ea 100644 --- a/web/src/lib/types.ts +++ b/web/src/lib/types.ts @@ -1,13 +1,33 @@ export interface User { id: string; phone: string; + /** 邮箱是账号名(可空):能用它 + 密码登录,也是以后找回密码的去处 */ + email?: string | null; nickname: string; avatar_url?: string | null; /** 设没设登录密码;密码本身永远不会回到前端 */ has_password?: boolean; + /** 平台管理员:能进「系统设置」改 SMTP 这类跨租户的配置 */ + platform_admin?: boolean; created_at?: string; } +/** + * 发信配置的回执:**永远不含授权码**,只说"设没设"。 + * `source` 说明当前值是从数据库读的还是从服务器环境变量兜的。 + */ +export interface SmtpSettings { + host: string | null; + port: number; + username: string | null; + password_set: boolean; + from_name: string; + use_ssl: boolean; + configured: boolean; + source: "db" | "env" | "none"; + updated_at?: string | null; +} + export interface Workspace { id: string; name: string; diff --git a/web/src/pages/Account.tsx b/web/src/pages/Account.tsx index 693ec15..c4833fb 100644 --- a/web/src/pages/Account.tsx +++ b/web/src/pages/Account.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { useNavigate } from "react-router-dom"; +import { Link, useNavigate } from "react-router-dom"; import { useAuth } from "../App"; import { SideRail } from "../components/SideRail"; import { Button, Field, InlineAlert } from "../components/ui"; @@ -7,10 +7,10 @@ import { ApiError, api } from "../lib/client"; import type { User } from "../lib/types"; /** - * 账号设置:昵称、登录密码、退出登录。 + * 账号设置:昵称、邮箱、登录密码、退出登录。 * - * 密码是**可选**的第二条登录路径:没设过的人一直走验证码, - * 界面上的文案要能让人看懂"现在设的是第一道密码"还是"在改已有的密码"。 + * 邮箱是**账号名**(能拿它 + 密码登录),不是"通知地址"的附属品, + * 所以放在基本信息里、和手机号并列,而不是藏在通知偏好里。 */ /** 小节标题:一行标题 + 一句"这是干嘛的",比光秃秃的 h2 省解释。 */ function SectionLabel({ hint, children }: { hint?: string; children: React.ReactNode }) { @@ -27,6 +27,7 @@ export function AccountPage() { const navigate = useNavigate(); const [nickname, setNickname] = useState(""); + const [email, setEmail] = useState(""); const [profileBusy, setProfileBusy] = useState(false); const [profileMsg, setProfileMsg] = useState(null); const [profileError, setProfileError] = useState(null); @@ -44,9 +45,12 @@ export function AccountPage() { useEffect(() => { if (user?.nickname) setNickname(user.nickname); - }, [user?.nickname]); + setEmail(user?.email ?? ""); + }, [user?.nickname, user?.email]); const hasPassword = Boolean(user?.has_password); + const nicknameChanged = nickname.trim() !== (user?.nickname ?? ""); + const emailChanged = email.trim() !== (user?.email ?? ""); async function saveProfile(event: React.FormEvent) { event.preventDefault(); @@ -54,9 +58,18 @@ export function AccountPage() { setProfileMsg(null); setProfileError(null); try { - await api.patch("/auth/me", { nickname: nickname.trim() }); + // 只发改过的字段:邮箱留空表示"解绑",不能因为没动它就被清掉 + const patch: { nickname?: string; email?: string } = {}; + if (nicknameChanged) patch.nickname = nickname.trim(); + if (emailChanged) patch.email = email.trim(); + + await api.patch("/auth/me", patch); await reload(); - setProfileMsg("昵称已更新"); + setProfileMsg( + emailChanged && !email.trim() + ? "邮箱已解绑,之后不能用邮箱登录" + : "资料已更新", + ); } catch (err) { setProfileError(err instanceof ApiError ? err.message : "保存失败"); } finally { @@ -146,6 +159,21 @@ export function AccountPage() { 手机号就是登录账号,暂不支持自助换号;换号等于换账号,需要单独处理。

+ + +

+ 邮箱是第二个账号名:绑上之后,登录页可以用「邮箱 + 密码」进入。留空保存就是解绑。 +

+ {profileMsg && {profileMsg}} {profileError && {profileError}} @@ -153,9 +181,9 @@ export function AccountPage() { type="submit" variant="primary" size="sm" - disabled={profileBusy || !nickname.trim() || nickname.trim() === user?.nickname} + disabled={profileBusy || !nickname.trim() || (!nicknameChanged && !emailChanged)} > - {profileBusy ? "保存中…" : "保存昵称"} + {profileBusy ? "保存中…" : "保存资料"} @@ -235,6 +263,22 @@ export function AccountPage() { 退出登录 + + {user?.platform_admin ? ( +
+ 系统设置 +

+ 发信邮箱(SMTP)在那儿改:填完可以当场发一封测试邮件,确认通道通不通。 + 改完即时生效,不用登服务器改配置、也不用重启。 +

+ + 打开系统设置 → + +
+ ) : null}
diff --git a/web/src/pages/Login.tsx b/web/src/pages/Login.tsx index 2587937..26b7bc4 100644 --- a/web/src/pages/Login.tsx +++ b/web/src/pages/Login.tsx @@ -30,33 +30,61 @@ const HIGHLIGHTS = [ }, ]; +const PHONE_RE = /^1[3-9]\d{9}$/; +const EMAIL_RE = /^[^@\s]{1,64}@[^@\s]{1,190}\.[A-Za-z]{2,}$/; + +/** 服务端现在开放哪些登录方式。先问再渲染,免得用户点进去才发现这条路关着。 */ +type Methods = { password: boolean; email_password: boolean; sms_code: boolean }; + export function LoginPage() { const { reload } = useAuth(); const navigate = useNavigate(); const [params] = useSearchParams(); const next = safeNext(params.get("next")); - const [phone, setPhone] = useState(""); + const [account, setAccount] = useState(""); + const [accountType, setAccountType] = useState<"phone" | "email">("phone"); const [code, setCode] = useState(""); const [password, setPassword] = useState(""); - const [mode, setMode] = useState<"code" | "password">("code"); + const [mode, setMode] = useState<"code" | "password">("password"); + const [methods, setMethods] = useState({ password: true, email_password: true, sms_code: false }); const [devCode, setDevCode] = useState(null); const [error, setError] = useState(null); const [busy, setBusy] = useState(false); const [countdown, setCountdown] = useState(0); + useEffect(() => { + let alive = true; + api + .get("/auth/methods") + .then((data) => { + if (!alive) return; + setMethods(data); + // 短信关着就别停在"验证码"这一档 + setMode(data.sms_code ? "password" : "password"); + }) + .catch(() => { + /* 拿不到就按"只有密码"渲染,至少不会把人挡在门外 */ + }); + return () => { + alive = false; + }; + }, []); + useEffect(() => { if (countdown <= 0) return; const timer = setTimeout(() => setCountdown((v) => v - 1), 1000); return () => clearTimeout(timer); }, [countdown]); - const phoneValid = /^1[3-9]\d{9}$/.test(phone); + const phoneValid = PHONE_RE.test(account); + const emailValid = EMAIL_RE.test(account.trim()); + const accountValid = accountType === "phone" ? phoneValid : emailValid; async function sendCode() { setError(null); setBusy(true); try { - const data = await api.post<{ dev_code?: string }>("/auth/sms/send", { phone }); + const data = await api.post<{ dev_code?: string }>("/auth/sms/send", { phone: account }); setDevCode(data.dev_code ?? null); setCountdown(60); } catch (err) { @@ -73,9 +101,9 @@ export function LoginPage() { try { const data = mode === "code" - ? await api.post<{ user: User; tokens: Tokens }>("/auth/login", { phone, code }) + ? await api.post<{ user: User; tokens: Tokens }>("/auth/login", { phone: account, code }) : await api.post<{ user: User; tokens: Tokens }>("/auth/login/password", { - phone, + ...(accountType === "phone" ? { phone: account } : { email: account.trim() }), password, }); session.save(data.tokens); @@ -88,6 +116,13 @@ export function LoginPage() { } } + const subtitle = + mode === "code" + ? "手机号验证码登录,第一次登录会自动创建账号。" + : methods.sms_code + ? "手机号或邮箱 + 密码。还没设过密码的,先用验证码登录一次再设。" + : "用手机号或邮箱 + 密码登录。"; + return (
{/* 左:品牌页 */} @@ -143,46 +178,79 @@ export function LoginPage() {

登录

-

- {mode === "code" - ? "手机号验证码登录,第一次登录会自动创建账号。" - : "用手机号和登录密码进入。没设过密码的,先用验证码登录一次再设。"} -

+

{subtitle}

-
- {( - [ - ["code", "验证码"], - ["password", "密码"], - ] as const - ).map(([key, label]) => ( - - ))} -
+ {/* 只有服务端真开着验证码,才给这两个档位;否则只留密码表单 */} + {methods.sms_code && ( +
+ {( + [ + ["password", "密码"], + ["code", "验证码"], + ] as const + ).map(([key, label]) => ( + + ))} +
+ )}
- + {/* 验证码只能发到手机号,所以这一档不给"邮箱"选项 */} + {mode === "password" && ( +
+ {( + [ + ["phone", "手机号"], + ["email", "邮箱"], + ] as const + ).map(([key, label]) => ( + + ))} +
+ )} + + setPhone(e.target.value.trim())} - maxLength={11} + type={accountType === "phone" || mode === "code" ? "tel" : "email"} + inputMode={accountType === "phone" || mode === "code" ? "numeric" : "email"} + autoComplete={accountType === "phone" || mode === "code" ? "tel" : "email"} + placeholder={ + accountType === "phone" || mode === "code" ? "13800138000" : "you@example.com" + } + value={account} + onChange={(e) => setAccount(e.target.value.trim())} + maxLength={accountType === "phone" || mode === "code" ? 11 : 255} /> @@ -238,7 +306,7 @@ export function LoginPage() { variant="primary" size="lg" className="mt-2 w-full" - disabled={busy || !phoneValid || (mode === "code" ? code.length < 4 : password.length < 1)} + disabled={busy || !accountValid || (mode === "code" ? code.length < 4 : password.length < 1)} > {busy ? "处理中…" : "登录"} diff --git a/web/src/pages/Settings.tsx b/web/src/pages/Settings.tsx new file mode 100644 index 0000000..feee328 --- /dev/null +++ b/web/src/pages/Settings.tsx @@ -0,0 +1,287 @@ +import { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { useAuth } from "../App"; +import { SideRail } from "../components/SideRail"; +import { Button, Field, InlineAlert } from "../components/ui"; +import { ApiError, api } from "../lib/client"; +import type { SmtpSettings } from "../lib/types"; + +/** + * 系统设置:平台级配置,全站共用一份,只有平台管理员能进。 + * + * 目前只有「发信邮箱」一项——它承载的是找回密码、以后的通知邮件, + * 属于"改一次、全站受影响"的东西,所以放后台可改,而不是写死在服务器 env 里。 + * + * 授权码只写不读:接口永远不会把它发回来,页面上也只显示"已设置 / 未设置"。 + */ + +function SectionLabel({ hint, children }: { hint?: string; children: React.ReactNode }) { + return ( +
+

{children}

+ {hint ?

{hint}

: null} +
+ ); +} + +const SOURCE_HINT: Record = { + db: "正在用后台保存的配置", + env: "后台还没保存过,先用的是服务器环境变量", + none: "还没配过,发信功能不可用", +}; + +export function SettingsPage() { + const { user, loading } = useAuth(); + const navigate = useNavigate(); + + const [ready, setReady] = useState(false); + const [host, setHost] = useState(""); + const [port, setPort] = useState("465"); + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + const [fromName, setFromName] = useState("达道Task"); + const [useSsl, setUseSsl] = useState(true); + const [saved, setSaved] = useState(null); + + const [busy, setBusy] = useState(false); + const [msg, setMsg] = useState(null); + const [error, setError] = useState(null); + + const [testTo, setTestTo] = useState(""); + const [testing, setTesting] = useState(false); + + useEffect(() => { + if (!loading && !user) navigate("/login", { replace: true }); + }, [loading, user, navigate]); + + useEffect(() => { + // 非平台管理员不该看到这个页面,也别去请求(后端会 3004) + if (loading || !user || !user.platform_admin) return; + let alive = true; + (async () => { + try { + const data = await api.get("/settings/smtp"); + if (!alive) return; + setSaved(data); + setHost(data.host ?? ""); + setPort(String(data.port ?? 465)); + setUsername(data.username ?? ""); + setFromName(data.from_name ?? "达道Task"); + setUseSsl(data.use_ssl); + setTestTo(data.username ?? ""); + } catch (err) { + if (alive) setError(err instanceof ApiError ? err.message : "读取配置失败"); + } finally { + if (alive) setReady(true); + } + })(); + return () => { + alive = false; + }; + }, [loading, user]); + + async function save(event: React.FormEvent) { + event.preventDefault(); + setBusy(true); + setMsg(null); + setError(null); + try { + const data = await api.put("/settings/smtp", { + host: host.trim(), + port: Number(port) || 465, + username: username.trim(), + // 留空 = 不改授权码;接口把空串当"沿用旧值" + password: password.trim() || null, + from_name: fromName.trim() || "达道Task", + use_ssl: useSsl, + }); + setSaved(data); + setPassword(""); + setMsg(data.configured ? "已保存,现在就能发信了" : "已保存,但还差必填项"); + } catch (err) { + setError(err instanceof ApiError ? err.message : "保存失败"); + } finally { + setBusy(false); + } + } + + async function sendTest() { + setTesting(true); + setMsg(null); + setError(null); + try { + const data = await api.post<{ to: string; message?: string }>("/settings/smtp/test", { + to: testTo.trim() || null, + }); + setMsg(`测试邮件已发到 ${data.to},去收件箱看一眼(可能在垃圾箱)`); + } catch (err) { + setError(err instanceof ApiError ? err.message : "发信失败"); + } finally { + setTesting(false); + } + } + + if (loading || !ready) { + return ( +
+ +
读取配置…
+
+ ); + } + + if (!user?.platform_admin) { + return ( +
+ +
+
+
+ 系统设置只有平台管理员能改。你在自己的账号页能改昵称、邮箱和密码。 +
+
+
+
+ ); + } + + return ( +
+ + +
+
+
+

系统设置

+

+ 这里的改动全站生效,改完不用重启服务。只有平台管理员能进来。 +

+
+ +
+
+ + 发信邮箱(SMTP) + + + + + setHost(e.target.value.trim())} + /> + + + + setPort(e.target.value.replace(/[^\d]/g, ""))} + /> + + + + setUsername(e.target.value.trim())} + /> + + + + setPassword(e.target.value)} + /> + + + + setFromName(e.target.value)} + /> + + + + +
+ {msg && {msg}} + {error && {error}} + +
+ +
+ +
+
+ 当前状态 +
+
+
能不能发信
+
+ {saved?.configured ? "可以" : "还不能"} +
+
+
+
授权码
+
{saved?.password_set ? "已设置" : "未设置"}
+
+
+
上次修改
+
+ {saved?.updated_at + ? new Date(saved.updated_at).toLocaleString("zh-CN") + : "—"} +
+
+
+
+ +
+ 发一封测试邮件 +
+ + setTestTo(e.target.value.trim())} + /> + + +
+
+
+
+
+
+
+ ); +}