编辑 | blame | 历史 | 原始文档

用户登录支持手机号 - 快速参考

📱 功能特性

支持两种登录方式:
- ✅ 账号 + 密码
- ✅ 手机号 + 密码

🔧 核心改动

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 优化登录前置校验

🎯 使用方式

前端无需修改,直接传递用户输入:

// 账号登录
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黑名单机制正常