$cacheService
$cacheService : \App\Services\Admin\PermissionCacheService
认证业务服务
职责:登录认证域全部业务逻辑——登录/刷新/下线、注册(验证码三步)、找回密码(两步)、 当前用户信息装配;JWT 签入 Redis、会话绝对生命周期、密码盐、验证码校验均在此收敛。 不处理 HTTP 关注点(Cookie 构造等),只返回 Service 数据。
┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 构造与依赖注入 构造方法(注入权限缓存 / 配置服务) 分区 2 · 会话流程 login / refresh / logout 分区 3 · 注册流程 sendRegisterCode / verifyRegisterCode / completeRegistration 分区 4 · 找回密码流程 sendResetLink / verifyResetToken / resetPassword 分区 5 · 当前用户信息 userinfo 分区 6 · 内部辅助方法 配置读取 / 频控 / 验证码 / 注册表键解析 └────────────────────────────────────────────────────────────┘
$cacheService : \App\Services\Admin\PermissionCacheService
$configService : \App\Services\Admin\ConfigService
login(array $credentials, string $captchaKey, array $captcha, bool $remember, int $rememberDays) : array
登录,返回 [md5Key, expiresAt, ttlMin](Cookie 由控制器按 ttlMin 构造)。
流程:① 校验登录锁定状态(超限拒绝,附剩余秒数) ② 校验点选验证码(验证码错误不计入登录锁定,防已知用户名被 DoS 锁定) ③ 手动校验用户名/密码/状态(用户名不存在抹平时序差,防枚举) ④ 签发 JWT 写入 Redis 会话,并记录会话绝对生命周期上限 ⑤ 清除失败计数、失效旧会话、更新库内 token 信息 ⑥ 预加载用户权限缓存并返回
| array | $credentials | |
| string | $captchaKey | |
| array | $captcha | |
| bool | $remember | |
| int | $rememberDays |
sendRegisterCode(string $username, string $email, string $captchaKey, array $captcha) : void
发起注册 —— 第一步:发送邮件验证码(6 位数字)。
流程:① 校验注册开关与点选验证码 ② 60 秒发送频率限制 ③ 用户名/邮箱查重(失败静默忽略,防枚举) ④ 邮件发送频控(次数上限 + 锁定窗口) ⑤ 生成 6 位验证码存 Redis(10 分钟,绑定邮箱)并发送邮件(模板 register_code)
| string | $username | |
| string | ||
| string | $captchaKey | |
| array | $captcha |
completeRegistration(string $username, string $email, string $code, string $password) : void
完成注册 —— 第三步:邮箱验证通过后设置密码并创建用户。
流程:① 校验验证码记录已 verified 且再次比对验证码 ② 生成随机盐,盐+密码哈希后 forceCreate 落库(salt/is_super 不在 fillable) ③ 清理验证码记录与发送频控键
| string | $username | |
| string | ||
| string | $code | |
| string | $password |
sendResetLink(string $email, string $captchaKey, array $captcha) : void
忘记密码 —— 第一步:发送密码重置链接邮件。
流程:① 校验找回开关与点选验证码 ② 60 秒发送频率限制(未注册邮箱同样设置,防枚举差分) ③ 按邮箱查用户(查不到返回统一提示,防邮箱枚举) ④ 邮件发送频控(仅在确要发邮件时计数) ⑤ 生成一次性重置 token(30 分钟,单次使用)并发送邮件(模板 reset_password)
| string | ||
| string | $captchaKey | |
| array | $captcha |
changePassword(string $oldPassword, string $newPassword) : void
自助修改密码(个人中心)。
流程:① 校验当前密码(salt 增强哈希,失败 400 不暴露原因) ② 再生盐并更新密码哈希(旧 salt 复用会让新旧哈希关联,与 resetPassword 同规) ③ 记密码台账(CHANGE_TYPE_CHANGED,操作人=本人) ④ 强制全部下线(删 Redis token + 清库内 token_key + 清权限缓存)—— 与找回密码同规,防旧会话在 token 有效期内继续可用,前端收到后跳登录
| string | $oldPassword | |
| string | $newPassword |
当前密码不正确