This site is under construction.
Nomad

3.1 用户模块

用户注册、登录、个人信息管理等

3.1 用户模块

用户模块包含以下功能:

3.1.1 用户注册 (User Registration)

1. 功能概述 (Feature Overview)

本功能允许新用户通过一个两步流程创建个人账户:

  • 第一步,通过手机号或邮箱和(模拟/真实的)短信验证码进行身份验证;
  • 第二步,设置账户密码;
  • 第三部,提示注册流程成功,进行后续操作。

同时,用户也可以通过GitHub第三方授权快速完成注册。

成功注册是用户进行机票预订、管理订单等所有核心操作的前提。

2. 优先级 (Priority)

  • MoSCoW 评级: Must Have

3. 用户故事 (User Stories)

  • US-01: 作为一个新访客,我希望能使用我的手机号和密码注册一个账户,以便能够预订机票和管理我的个人信息
  • US-02: 作为一个拥有GitHub账户的新访客,我希望能通过GitHub一键授权来创建账户,以便跳过繁琐的表单填写,快速开始使用平台
  • US-03: 作为一个按照流程注册完成的访客,我希望能快速跳转到需要访问的页面,以便更好的使用体验
  • US-04: 作为一个网站运营者,我希望在发送短信验证码前进行人机验证,以便保护短信接口不被恶意程序攻击,节约成本

4. 验收标准 (Acceptance Criteria)

场景1: 用户成功完成两步注册 (Happy Path)

  • Given 用户位于注册流程第一步(手机/邮箱验证页),且未登录
  • And 用户输入了有效的、未被注册的手机号/邮箱地址,并通过了人机验证
  • And 用户勾选了“同意用户协议”
  • When 用户获取并输入了正确的验证码,并点击“下一步”
  • Then 系统应验证通过,并将用户引导至注册流程第二步(设置密码页)
  • And 当用户在第二步输入符合强度要求的密码和确认密码
  • When 用户点击“完成注册”按钮
  • Then 系统应成功创建新账户,将用户引导至注册流程第三步,并给用户提供跳转至登录页或CallbackURL或直接登录进入个人中心的链接

场景2: 人机验证

  • Given 用户位于注册流程第一步
  • When 用户未通过人机验证就点击“获取验证码”
  • Then “获取验证码”按钮应不可点击或提示“请先完成安全验证”

场景3: 手机号/邮箱已被注册

  • Given 用户位于注册流程第一步
  • When 用户输入一个已经被注册的手机号/邮箱并点击“获取验证码”或“注册”
  • Then 系统应提示“该手机号/邮箱已被注册”,并阻止后续流程同时提供“去登录”的链接

场景4: 短信验证码错误或无效

  • Given 用户位于注册流程第一步并已收到(模拟的)短信验证码
  • When 用户输入了无效的(错误或过期)的验证码并点击“下一步”
  • Then 系统应提示“验证码错误或已失效”,允许用户重新获取,并让用户停留在第一步

场景5: 用户未同意用户协议

  • Given 用户填写了所有必填信息
  • When 用户点击“注册”按钮但未勾选“同意用户协议”
  • Then 系统应提示“请先阅读并同意用户协议”,注册流程不应继续

场景6: 设置密码时不一致

  • Given 用户位于注册流程第二步
  • When 用户输入的“密码”与“确认密码”不一致并点击“完成注册”
  • Then 系统应提示“两次输入的密码不一致”,并让用户停留在第二步

场景7: 用户通过GitHub成功注册 (Happy Path)

  • Given 用户位于注册/登录页面,且其GitHub账户的邮箱未在本平台注册
  • When 用户点击“通过GitHub注册/登录”并成功完成授权
  • Then 系统应使用其GitHub信息(用户名、头像)自动创建平台账户,并让用户进入登录状态

场景8: GitHub账户的邮箱已经在本平台注册

  • Given 一个GitHub账户的邮箱地址 user@example.com 已经在平台注册
  • When 该用户尝试通过此GitHub账户进行授权注册
  • Then 系统应提示“该GitHub账户已关联平台现有账户,请直接登录”并提供一个快捷登录按钮

5. UI与交互设计简述 (UI/UX Notes)

采用三步式向导界面:

整体页面布局
  • 所需UI元素:
    • 步骤指示器
第一步:验证手机号/邮箱
  • 所需UI元素:
    • 手机号输入框
    • “获取验证码”按钮
    • 验证码输入框
    • “我已阅读并同意《用户协议》”的复选框及协议链接
    • 人机验证组件(可以是隐藏的)
    • “下一步”按钮
    • “已有账户?去登录”的链接
    • 分割线或文字提示“其他方式注册”
    • “通过GitHub登录”按钮
  • 关键交互:
    • 点击“获取验证码”后,后台立刻进行人机验证/弹出人机验证窗口。
    • 人机验证通过后,“获取验证码”按钮变为禁用状态并显示60秒倒计时;倒计时结束后恢复可用。
第二步:设置密码
  • 所需UI元素:
    • 注册手机号/邮箱提示文本
    • 密码输入框(带强度提示和可见性切换)
    • 确认密码输入框
    • “完成注册”按钮
    • “返回上一步”按钮
  • 关键交互:
    • 实时校验两次输入的密码是否一致。
    • 密码输入时,实时显示密码强度(弱、中、强)。
    • 可以点击“返回上一步”按钮
第三步:注册完成
  • 所需UI元素:
    • 注册成功信息
    • 快速跳转链接一:指向用户重定向URL(默认首页)
    • 快速跳转链接二:指向用户管理信息后台
  • 关键交互:
    • 如果用户在非登录、无账户状态下被重定向到这个注册流程页面,则在流程结束后应该能够返回之前访问的页面

3.1.2 用户登录 (User Login)

1. 功能概述 (Feature Overview)

本功能为已注册用户提供安全、便捷的身份认证入口。用户可以通过三种主要方式访问自己的账户:使用手机号/邮箱和密码、使用手机号/邮箱和一次性验证码,或通过关联的GitHub账户进行一键式授权登录。本功能还支持“记住我”选项,以提升回访用户的体验。

2. 优先级 (Priority)

  • MoSCoW 评级: Must Have

3. 用户故事 (User Stories)

  • US-01: 作为一个已注册用户,我希望能使用我的手机号/邮箱和密码进行登录,以便安全地访问我的账户和订单信息

  • US-02: 作为一个已注册用户,我希望能通过发送到我手机/邮箱的一次性验证码来登录,以便在我忘记密码或在公共设备上登录时,能快速、安全地访问账户

  • US-03: 作为一个通过GitHub注册的用户,我希望能通过点击GitHub图标一键登录,以便享受最快捷的登录体验

  • [MoSCoW评级: Should Have] US-04: 作为一个在个人设备上频繁访问的用户,我希望系统能记住我的登录状态,以便在下次访问时无需重复输入凭证

4. 验收标准 (Acceptance Criteria)

场景1: 用户使用密码成功登录 (Happy Path)

  • Given 用户位于登录页面
  • When 用户输入已注册的、正确的手机号/邮箱和对应的密码,并点击“登录”
  • Then 系统应验证凭证成功,并将用户跳转至个人中心或之前的页面(CallbackURL)

场景2: 用户使用错误的密码登录

  • Given 用户位于登录页面
  • When 用户输入已注册的手机号/邮箱和错误的密码
  • Then 系统应提示“手机号/邮箱或密码错误”,并让用户停留在登录页面

场景3: 用户使用未注册的账户登录

  • Given 用户位于登录页面
  • When 用户输入一个未被注册的手机号/邮箱
  • Then 系统应提示"账户不存在,请先注册",并提供注册页面的链接

场景4: 用户使用验证码成功登录 (Happy Path)

  • Given 用户位于登录页面
  • When 用户输入已注册的手机号/邮箱,获取并输入了正确的验证码,并点击"登录"
  • Then 系统应验证通过,并成功登录

场景5: 用户输入无效的验证码

  • Given 用户位于登录页面并已获取验证码
  • When 用户输入了错误的或已过期的验证码
  • Then 系统应提示"验证码错误或已失效"

场景6: 用户未同意用户协议

  • Given 用户填写了所有必填信息
  • When 用户点击“登录”按钮但未勾选“同意用户协议”
  • Then 系统应提示“请先阅读并同意用户协议”,登录流程不应继续

[MoSCoW评级: Should Have] 场景7: "记住我"功能生效

  • Given 用户在登录时勾选了"记住我"并成功登录
  • When 用户关闭浏览器标签页,并在Token有效期内重新访问网站
  • Then 系统应自动识别用户的登录状态,用户无需再次登录

场景8: 用户通过GitHub成功登录/注册 (Happy Path)

  • Given 用户位于登录页面
  • When 用户点击"通过GitHub登录"并成功完成授权
  • Then 系统应验证GitHub账户信息,若该邮箱未注册则自动创建账户(使用GitHub的用户名、头像等信息),并将用户跳转至个人中心或之前的页面

场景9: 使用已关联的GitHub账户登录

  • Given 用户的GitHub账户邮箱已在平台注册或已关联现有账户
  • When 用户通过该GitHub账户进行授权登录
  • Then 系统应识别已关联账户,直接完成登录并跳转至个人中心或之前的页面

5. UI与交互设计简述 (UI/UX Notes)

表单中有一个按钮切换“密码登录”和“验证码登录”两种模式,保持界面整洁。

  • 所需UI元素:
    • “密码登录” / “验证码登录” 的页签切换组件。
    • 手机号/邮箱统一输入框。
    • 密码输入框(在“密码登录”模式下显示)。
    • “获取验证码”按钮(在“验证码登录”模式下显示)。
    • 验证码输入框(在“验证码登录”模式下显示)。
    • [MoSCoW评级: Should Have] “记住我”复选框。
    • “忘记密码?”链接。
    • “我已阅读并同意《用户协议》”的复选框及协议链接
    • “登录”主按钮。
    • 分割线或文字提示“其他方式注册”
    • 第三方登录区域(GitHub图标)。
    • “没有账户?去注册”的链接。

3.1.3 个人基本信息管理 (Basic Profile Management)

1. 功能概述 (Feature Overview)

本功能位于用户登录后的“个人中心”内,允许用户查看和编辑自己的个人基本资料,如昵称、真实姓名等。同时,为保护隐私,敏感信息(手机号、邮箱)将以脱敏形式展示。

2. 优先级 (Priority)

  • MoSCoW 评级: Must Have

3. 用户故事 (User Stories)

  • US-01: 作为一个已登录用户,我希望能查看我的个人基本信息,以便确认我的账户资料
  • US-02: 作为一个已登录用户,我希望能修改我的昵称、真实姓名等非关键信息,以便保持我的个人资料准确或更具个性化

4. 验收标准 (Acceptance Criteria)

场景1: 用户成功查看个人信息

  • Given 用户已登录并访问"个人中心"的"基本信息"页面
  • When 页面加载完成
  • Then 页面应正确显示当前用户的昵称、真实姓名等信息,且用户的手机号和邮箱地址等敏感信息应被部分屏蔽(例如 138****1234u***@example.com

场景2: 用户成功修改并保存信息

  • Given 用户位于"基本信息"页面,并点击了"编辑"按钮
  • When 用户修改了"昵称"字段,并点击"保存"
  • Then 系统应提示"保存成功",且页面上应显示更新后的昵称

场景3: 用户提交无效信息

  • Given 用户处于编辑状态
  • When 用户清空了"真实姓名"等必填项,并点击"保存"
  • Then 系统应提示"真实姓名不能为空",且保存操作应被阻止

5. UI与交互设计简述 (UI/UX Notes)

  • 页面布局:
    • 采用左侧导航栏(包含“基本信息”、“旅客信息”、“密码管理”等链接),右侧内容区的经典布局。
  • 所需UI元素:
    • 显示状态:
      • 昵称、真实姓名、生日、性别等信息的文本标签和值。
      • 被脱敏处理的手机号和邮箱地址(只读)。
      • “编辑”按钮。
    • 编辑状态:
      • 变为可输入的表单字段。
      • “保存”和“取消”按钮。
  • 关键交互:
    • 点击“编辑”按钮,页面信息变为可编辑的表单。
    • 点击“保存”成功后,页面恢复为显示状态,并展示新信息。

3.1.4 常用旅客信息管理 (Traveler Information Management)

1. 功能概述 (Feature Overview)

本功能允许已登录用户在"个人中心"内预先添加和管理自己及同行旅客(如家人、朋友)的个人信息。在预订机票填写旅客信息时,用户可以直接从列表中选择,从而极大简化预订流程、节省时间,并有效避免因手动输入而产生的错误。

2. 优先级 (Priority)

  • MoSCoW 评级: Must Have

3. 用户故事 (User Stories)

  • US-01: 作为一个经常为家人预订机票的用户,我希望能提前将他们的身份信息(姓名、证件号等)保存为常用旅客,以便在预订时能一键选择,不必每次都去查找和输入
  • US-02: 作为一个用户,在填写订单信息时,我希望能从我已保存的常用旅客列表中快速选择,以便准确无误地自动填充他们的信息
  • US-03: 作为一个用户,我希望能随时编辑或删除已保存的常用旅客信息,以便在他们的证件更新(如护照过期)或不再同行时,保持列表的准确性

4. 验收标准 (Acceptance Criteria)

场景1: 用户查看空的旅客列表

  • Given 用户已登录并访问"常用旅客"页面
  • When 该用户从未添加过任何旅客
  • Then 页面应显示"您还没有常用旅客,快来添加吧!"之类的友好提示和一个"添加新旅客"的按钮

场景2: 用户成功添加一名新旅客

  • Given 用户位于"常用旅客"页面
  • When 用户点击"添加新旅客",在表单中填写了所有有效的必填信息(如姓名、证件类型、证件号),并点击"保存"
  • Then 系统应提示"添加成功"
  • And 新添加的旅客信息应出现在旅客列表中

场景3: 用户尝试添加信息不完整的旅客

  • Given 用户正在填写"添加新旅客"的表单
  • When 用户未填写"证件号码"就点击"保存"
  • Then 系统应在"证件号码"输入框旁提示"此项为必填项",并阻止保存

场景4: 用户成功编辑一名旅客的信息

  • Given 用户的旅客列表中已有一名旅客
  • When 用户点击该旅客的"编辑"按钮,修改其信息后点击"保存"
  • Then 系统应提示"更新成功",并且列表中的信息应更新为修改后的内容

场景5: 用户成功删除一名旅客

  • Given 用户的旅客列表中有多名旅客
  • When 用户点击其中一名旅客的"删除"按钮,并在弹出的确认框中点击"确认"
  • Then 该旅客应从列表中移除

场景6: 用户在预订机票时成功选用常用旅客

  • Given 用户正在"订单填写页"填写旅客信息
  • And 该用户已保存了至少一名常用旅客
  • When 用户点击"从常用旅客中选择"并选中一名旅客
  • Then 该旅客的姓名、证件类型、证件号码等信息应被自动填充到对应的表单输入框中

5. UI与交互设计简述 (UI/UX Notes)

  • 所需UI元素:
    • "添加新旅客"按钮
    • 旅客列表/卡片展示区域
    • 旅客卡片(包含姓名、证件类型、脱敏证件号、"编辑"和"删除"按钮)
    • 添加/编辑旅客表单(Modal或新页面,包含姓名、证件类型下拉菜单、证件号、出生日期、性别等字段)
    • 删除确认弹窗
  • 关键交互:
    • 页面位于个人中心左侧导航栏,右侧为内容区
    • 证件号显示为脱敏格式(如 310***********1234)
    • 删除操作需二次确认("您确定要删除旅客 [旅客姓名] 吗?")
    • 在订单填写页可通过"从常用旅客中选择"快速填充信息

3.1.5 密码修改 (Password Change)

1. 功能概述 (Feature Overview)

本功能允许已登录的用户在"个人中心"的安全设置区域修改自己的账户密码。用户需要先提供其当前的密码进行验证,然后才能设置一个符合安全要求的新密码。这是保障用户账户安全的基础功能。

2. 优先级 (Priority)

  • MoSCoW 评级: Should Have

3. 用户故事 (User Stories)

  • US-01: 作为一个注重安全的用户,我希望能够定期修改我的登录密码,以便降低我的账户被盗用的风险
  • US-02: 作为一个怀疑自己账户信息可能已泄露的用户,我希望能立即修改我的密码,以便重新获得对我账户的控制权,保护我的个人信息

4. 验收标准 (Acceptance Criteria)

场景1: 用户成功修改密码 (Happy Path)

  • Given 用户已登录,并访问"密码修改"页面
  • When 用户输入了正确的"当前密码"
  • And 用户输入了符合强度要求的"新密码",并在"确认新密码"栏中再次输入了相同的新密码
  • And 用户点击"更新密码"按钮
  • Then 系统应提示"密码修改成功,请使用新密码重新登录"
  • And 系统应自动将用户登出,并跳转至登录页面

场景2: 用户输入的当前密码错误

  • Given 用户已登录,并访问"密码修改"页面
  • When 用户输入了错误的"当前密码"
  • Then 系统应提示"当前密码不正确,请重试",并且密码不会被修改

场景3: 用户两次输入的新密码不一致

  • Given 用户已登录,并访问"密码修改"页面
  • When 用户输入的"新密码"与"确认新密码"不匹配
  • Then 系统应在"确认新密码"字段旁提示"两次输入的密码不一致"

场景4: 新密码不符合安全强度要求

  • Given 用户已登录,并访问"密码修改"页面
  • When 用户输入的新密码过于简单(例如,少于8位)
  • Then 系统应提示密码的具体强度要求(例如"密码长度不能少于8位,且需包含字母和数字")

5. UI与交互设计简述 (UI/UX Notes)

  • 所需UI元素:
    • "当前密码"输入框(password type)
    • "新密码"输入框(password type)
    • "确认新密码"输入框(password type)
    • "更新密码"按钮
    • 密码强度要求说明文字
    • 密码强度指示器(弱、中、强)
  • 关键交互:
    • 页面位于个人中心左侧导航栏,右侧为内容区
    • 在用户输入"新密码"时,实时显示密码强度指示器
    • 密码修改成功后自动登出并跳转至登录页面

3.1.6 忘记密码 (Forgot Password)

1. 功能概述 (Feature Overview)

本功能为未登录状态下忘记密码的用户提供了一条安全、自助的账户恢复路径。用户通过验证其注册手机号或邮箱的所有权,可以重置一个新的登录密码,从而重新获得对其账户的访问权限。

2. 优先级 (Priority)

  • MoSCoW 评级: Should Have

3. 用户故事 (User Stories)

  • US-01: 作为一个忘记了密码的已注册用户,我希望能够通过我的注册手机或邮箱来安全地重置密码,以便我能重新登录并使用我的账户

4. 验收标准 (Acceptance Criteria)

场景1: 用户成功重置密码 (Happy Path)

  • Given 用户处于未登录状态,并访问了"忘记密码"页面
  • When 用户在第一步输入了已注册的手机号/邮箱,通过人机验证,并点击"发送验证码"
  • And 用户在第二步输入了收到的正确验证码,并输入了符合强度要求的、两次一致的新密码
  • And 用户点击"确认重置"按钮
  • Then 系统应成功更新用户的密码
  • And 用户应被跳转至登录页面,并看到"密码重置成功,请使用新密码登录"的提示

场景2: 用户输入未注册的账号

  • Given 用户处于"忘记密码"第一步
  • When 用户输入一个未在本系统注册的手机号/邮箱
  • Then 为防止攻击者探测账户是否存在,系统前端应依然提示"如果该账户存在,验证码已发送至您的手机/邮箱",但后端实际上不执行任何操作

场景3: 用户输入的验证码错误或过期

  • Given 用户已进入重置密码的第二步
  • When 用户输入了错误的或已过期的验证码
  • Then 系统应提示"验证码错误或已失效",并允许用户返回上一步重新获取

场景4: 用户设置的新密码不一致或不符合要求

  • Given 用户已进入重置密码的第二步
  • When 用户输入的两次新密码不一致,或新密码不符合强度要求
  • Then 系统应给出对应的错误提示("密码不一致"或"密码强度不足"),并阻止密码重置

5. UI与交互设计简述 (UI/UX Notes)

  • 所需UI元素:
    • "重置密码"标题
    • 手机号/邮箱统一输入框
    • 人机验证组件
    • "发送验证码"按钮
    • 验证码输入框
    • 新密码输入框(带强度提示)
    • 确认新密码输入框
    • "确认重置"按钮
    • "返回登录"链接
  • 关键交互:
    • 采用两步式向导界面
    • 第一步完成身份验证(输入账号、人机验证、发送验证码)
    • 第二步设置新密码(输入验证码、新密码、确认新密码)
    • 密码重置成功后跳转至登录页面