# 用户登录支持手机号 - 快速参考 ## 📱 功能特性 支持两种登录方式: - ✅ **账号 + 密码** - ✅ **手机号 + 密码** ## 🔧 核心改动 ### 1️⃣ 新增接口方法 **ISysUserService.java** ```java public SysUser selectUserByPhonenumber(String phonenumber); ``` ### 2️⃣ 自动识别逻辑 **UserDetailsServiceImpl.java** - `loadUserByUsername` 方法 ```java // 手机号格式:1[3-9]\d{9} if (username.matches("^1[3-9]\\d{9}$")) { user = userService.selectUserByPhonenumber(username); } else { user = userService.selectUserByUserName(username); } ``` ### 3️⃣ 优化校验规则 **SysLoginService.java** - `loginPreCheck` 方法 ```java boolean isPhoneLogin = username.matches("^1[3-9]\\d{9}$"); // 仅对非手机号登录校验用户名长度 if (!isPhoneLogin) { // 校验用户名长度 } ``` ## 📋 修改文件列表 | 文件 | 修改内容 | |------|---------| | `ISysUserService.java` | 新增 selectUserByPhonenumber 接口 | | `SysUserServiceImpl.java` | 实现 selectUserByPhonenumber 方法 | | `UserDetailsServiceImpl.java` | 增加手机号/账号自动识别 | | `SysLoginService.java` | 优化登录前置校验 | ## 🎯 使用方式 前端无需修改,直接传递用户输入: ```javascript // 账号登录 login({ username: "admin", password: "admin123" }) // 手机号登录 login({ username: "13800138000", password: "password123" }) ``` ## ⚠️ 注意事项 1. **手机号格式**:必须是1开头,第二位3-9,共11位 2. **唯一性**:手机号在系统中必须唯一 3. **兼容性**:完全向后兼容,原有功能不受影响 ## 📊 识别规则 | 输入示例 | 识别为 | 查询方式 | |---------|--------|---------| | admin | 账号 | selectUserByUserName | | 13800138000 | 手机号 | selectUserByPhonenumber | | test001 | 账号 | selectUserByUserName | | 19912345678 | 手机号 | selectUserByPhonenumber | ## ✅ 测试清单 - [ ] 使用账号登录成功 - [ ] 使用手机号登录成功 - [ ] 账号不存在提示正确 - [ ] 手机号不存在提示正确 - [ ] 密码错误提示正确 - [ ] 密码重试限制生效 - [ ] 验证码机制正常 - [ ] IP黑名单机制正常