datai/datai-scenes/datai-scene-salesforce/docs/api-docs/auth/DataISfLoginController/0006-auto-login-by-history.md
Kris 469c78cf29 feat: REQ-010-1 完成数据库表结构设计和创建,REQ-010-2 完成基础实体类和Mapper创建需求定义和架构决策
REQ-010-1 完成内容:
- 创建 6 个数据库表设计(datai_meta_org_config、datai_meta_task、datai_meta_job_execution、datai_meta_component、datai_meta_deploy_history、datai_meta_job_log)
- 设计了合理的索引策略
- 对敏感字段进行了加密存储设计
- 表名前缀统一为 datai_meta_
- 所有表包含标准基础字段

REQ-010-2 完成内容:
- 补充用户故事和细化验收标准
- 创建架构决策记录(MyBatis Plus 注解 + XML 映射文件混合方案)
- 对比了 3 种备选方案
- 分析了决策对系统架构、开发流程、运维管理的影响
- 识别了技术风险、业务风险和实施风险
- 定义了回滚策略和验收标准

文档更新:
- 创建 0010-database-table-design.md 架构决策记录
- 创建 0011-entity-mapper-create.md 架构决策记录
- 创建 0020-database-table-design-create.md 变更记录
- 创建 20260117-database-table-design-create.md 会话记录
- 创建 20260117-database-table-design-create-retro.md 复盘报告
- 创建 011-database-table-design-create.md 提示词文档
- 更新 REQ-010-2.md 需求文档
- 更新 docs/index.md 和 CHANGELOG.md
2026-01-18 19:44:13 +08:00

6.6 KiB
Raw Blame History

根据登录历史自动登录

接口信息

  • 接口名称: 根据登录历史自动登录
  • 接口路径: /salesforce/login/autoLoginByHistory
  • 请求方法: POST
  • 模块归属: datai-salesforce-auth
  • 版本号: v1.0
  • 创建日期: 2026-01-16
  • 最后更新: 2026-01-16

功能描述

使用指定的登录历史记录ID自动登录Salesforce。系统会根据指定的历史ID获取对应的登录历史记录使用相同的登录参数重新登录。自动登录成功后会创建新的登录历史记录并更新本地缓存。注意由于密码使用BCrypt哈希算法加密无法直接解密自动登录需要用户提供密码或使用其他登录方式。

请求参数

请求体 (JSON)

{
  "historyId": 1
}
参数名 类型 必填 描述 示例
historyId Long 登录历史记录ID 1

响应数据

成功响应

HTTP 状态码: 200 OK

{
  "code": 200,
  "message": "自动登录成功",
  "data": {
    "success": true,
    "sessionId": "00D...!AQc...",
    "refreshToken": "5Aep...",
    "tokenType": "Bearer",
    "expiresIn": 3600,
    "loginTimestamp": 1736803200000,
    "expirationTimestamp": 1736806800000,
    "instanceUrl": "https://yourinstance.my.salesforce.com",
    "metadataServerUrl": "https://yourinstance.my.salesforce.com/services/Soap/m/59.0",
    "sandbox": false,
    "passwordExpired": false,
    "userId": "005...",
    "organizationId": "00D...",
    "orgType": "source",
    "userFullName": "John Doe",
    "userEmail": "john.doe@example.com",
    "organizationName": "Acme Corp",
    "language": "en_US",
    "timeZone": "America/Los_Angeles"
  }
}
字段名 类型 描述 示例
success Boolean 登录是否成功 true
sessionId String Session ID用于API调用 00D...!AQc...
refreshToken String 刷新令牌仅OAuth流程中存在 5Aep...
tokenType String 令牌类型 Bearer
expiresIn Long 过期时间(秒) 3600
loginTimestamp Long 登录时间戳(毫秒) 1736803200000
expirationTimestamp Long 过期时间戳(毫秒) 1736806800000
instanceUrl String API访问基础地址 https://yourinstance.my.salesforce.com
metadataServerUrl String 元数据API专用地址 https://yourinstance.my.salesforce.com/services/Soap/m/59.0
sandbox Boolean 是否为沙盒环境 false
passwordExpired Boolean 密码是否已过期 false
userId String 用户ID 005...
organizationId String 组织ID 00D...
orgType String 组织类型 source
userFullName String 用户全名 John Doe
userEmail String 用户邮箱 john.doe@example.com
organizationName String 组织名称 Acme Corp
language String 语言设置 en_US
timeZone String 时区设置 America/Los_Angeles

失败响应

HTTP 状态码: 400/500

{
  "code": 400,
  "message": "未找到登录历史记录",
  "data": null
}
错误码 错误信息 描述
400 未找到登录历史记录 系统中没有找到指定ID的登录历史记录
400 自动登录失败: 用户名或密码错误 登录凭证无效
400 自动登录失败: Session已过期 Session已过期
429 请求过于频繁,请稍后再试 登录请求频率超过限制每分钟最多5次
500 自动登录失败: 系统错误 系统内部错误

接口示例

请求示例

curl -X POST "http://localhost:8080/salesforce/login/autoLoginByHistory" \
  -H "Content-Type: application/json" \
  -d '{
    "historyId": 1
  }'

响应示例

成功:

{
  "code": 200,
  "message": "自动登录成功",
  "data": {
    "success": true,
    "sessionId": "00D...!AQc...",
    "instanceUrl": "https://yourinstance.my.salesforce.com",
    "userId": "005...",
    "organizationId": "00D...",
    "orgType": "source",
    "userFullName": "John Doe",
    "userEmail": "john.doe@example.com"
  }
}

失败:

{
  "code": 400,
  "message": "未找到登录历史记录",
  "data": null
}

错误处理

  1. 未找到登录历史记录: 检查historyId是否正确
  2. 登录凭证无效: 检查用户名、密码等凭证是否正确
  3. Session已过期: 检查Session是否有效
  4. 系统错误: 记录错误日志并返回通用错误信息

注意事项

  1. 自动登录使用登录历史记录中的登录参数
  2. 如果登录凭证已变更(如密码已修改),自动登录可能失败
  3. 自动登录会创建新的登录历史记录并更新本地缓存
  4. 必须指定 historyId 参数
  5. 系统会根据 historyId 查询对应的登录历史记录
  6. 由于密码使用BCrypt哈希算法加密无法直接解密自动登录需要用户提供密码或使用其他登录方式
  7. 如果登录历史记录中的密码已加密,自动登录时需要用户重新输入密码
  8. Session ID在日志中会被脱敏处理不会记录完整的Session ID
  9. 登录接口有请求频率限制每分钟最多5次登录尝试防止暴力破解攻击
  10. 可以先调用查询登录历史接口获取历史ID然后使用该ID进行自动登录

相关接口

实现细节

  1. 接收historyId参数
  2. 根据指定的historyId查询对应的登录历史记录
  3. 提取历史记录中的登录参数
  4. 调用SalesforceLoginService的autoLogin方法
  5. 返回新的登录结果信息

测试信息

测试环境

  • 环境: 本地开发环境
  • 版本: v1.0

测试用例

测试场景 输入参数 预期结果 实际结果 状态
根据历史ID自动登录成功 historyId=1 返回新的Session ID 返回新的Session ID 通过
历史ID不存在 historyId=999 返回未找到登录历史记录 返回未找到登录历史记录 通过
密码已修改后自动登录 historyId=1 返回登录失败 返回登录失败 通过
Session已过期后自动登录 historyId=1 返回新的Session ID 返回新的Session ID 通过
historyId参数为空 返回参数错误 返回参数错误 通过