# Feishu Verified Mobile Auto-Join Prerequisites

状态：completed
最后更新：2026-03-23
适用范围：`agentteam-org` Feishu fallback auto-join、`internal/appapi` auth、`internal/store` user model

## 1. 当前结论

截至 `2026-03-23`，仓库里已经具备：

- Feishu SSO 登录
- Feishu directory 自动导入
- verified email fallback auto-join
- verified mobile fallback auto-join

也就是说，原先阻塞 verified mobile fallback 的通用 auth/user 前置能力已经补齐。

## 2. 现在具体补到了什么

当前仓库里的关键事实：

- `users` 表新增：
  - `mobile`
  - `mobile_verified_at`
- `domain.User` 新增：
  - `Mobile`
  - `MobileVerifiedAt`
  - `HasVerifiedIdentity()` / `HasVerifiedMobile()` helper
- public auth 仍保持旧 `POST /api/auth/login { email, password }` wire contract，
  但该 `email` 字段现在可承载 verified mobile identifier
- app auth 新增 mobile verification flow：
  - `POST /api/auth/mobile/request-verification`
  - `POST /api/auth/mobile/verify`
- store 新增：
  - `FindUserByMobile`
  - `FindUserByLoginIdentifier`
  - `CreateMobileVerificationToken`
  - `VerifyMobileToken`
- `agentteam-org` Feishu provider 新增：
  - `BatchGetUserIDsByMobile`
  - `AutoJoinOrganizationsForVerifiedMobile`

代码依据：

- `internal/tidb/bootstrap.sql`
- `agentteam-core/domain/auth.go`
- `internal/core/authidentity/identifiers.go`
- `internal/appapi/handlers_auth.go`
- `internal/appapi/handlers_auth_mobile.go`
- `internal/store/public.go`
- `agentteam-org/feishu_email_auto_join.go`
- `agentteam-org/feishu_client.go`

## 3. 落地后的语义

当前已落地的 fallback auto-join 边界为：

- Feishu SSO
- verified email login
- verified mobile login

自动加入仍保持原来的安全边界：

- 只接受已验证联系信息
- 必须唯一命中 imported directory user
- 只做 organization member bind
- 不因为 auto-join 自动放大全部 workspace

## 4. 架构边界仍保持不变

为了补 mobile fallback，以下部分仍然没有改变：

- `workspace-first` 边界
- `unit -> team -> effective_grant` 授权链
- core 不理解 org chart 的原则
- Feishu auth-binding / directory-binding 分层
- “auto-join 只 bind organization，不自动放大全部 workspace” 的语义

更具体地说：

- 通用 mobile identity / verification / login 能力继续留在 core/app auth
- Feishu `batch_get_id.mobiles` 继续只留在 `agentteam-org` provider 内部
- 没有把 vendor-specific mobile lookup 倒灌进 core

## 5. 保留下来的风险提醒

虽然前置能力已经补齐，但仍需注意：

- 不要把 future vendor-specific mobile identity 直接塞回通用 `users` 模型
- 不要把 login surface 改成 mobile-only，现有 `{ email, password }` 兼容仍必须保留
- auto-join explainability 当前仍是“last attempt summary”级别，不是完整历史审计
