系统登录接口已升级,现在支持两种登录方式:
1. 账号密码登录:使用用户名 + 密码
2. 手机号密码登录:使用手机号 + 密码
系统会自动识别用户输入的是手机号还是账号,无需额外指定登录类型。
系统通过正则表达式自动识别输入类型:
- 手机号格式:匹配 ^1[3-9]\d{9}$(1开头,第二位3-9,共11位数字)
- 用户名格式:不符合手机号格式的视为用户名
// 判断是否为手机号
if (username.matches("^1[3-9]\\d{9}$")) {
// 通过手机号查询用户
user = userService.selectUserByPhonenumber(username);
} else {
// 通过用户名查询用户
user = userService.selectUserByUserName(username);
}
文件: ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
新增方法:java /** * 通过手机号查询用户 * * @param phonenumber 手机号 * @return 用户对象信息 */ public SysUser selectUserByPhonenumber(String phonenumber);
文件: ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
实现方法:java @Override public SysUser selectUserByPhonenumber(String phonenumber) { return userMapper.checkPhoneUnique(phonenumber); }
文件: ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
修改 loadUserByUsername 方法:
- 增加手机号识别逻辑
- 根据输入类型调用不同的查询方法
- 增加详细的日志记录
文件: ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
修改 loginPreCheck 方法:
- 优化用户名长度校验(手机号登录时不校验用户名长度)
- 更新注释说明支持手机号登录
请求:json POST /login { "username": "admin", "password": "admin123", "code": "1234", "uuid": "xxx-xxx-xxx" }
处理流程:
1. 系统识别 "admin" 不是手机号格式
2. 调用 selectUserByUserName("admin") 查询用户
3. 验证密码,生成 Token
请求:json POST /login { "username": "13800138000", "password": "password123", "code": "1234", "uuid": "xxx-xxx-xxx" }
处理流程:
1. 系统识别 "13800138000" 是手机号格式
2. 调用 selectUserByPhonenumber("13800138000") 查询用户
3. 验证密码,生成 Token
系统会记录详细的登录日志,便于追踪和排查问题:
尝试使用用户名登录:admin
尝试使用手机号登录:13800138000
前端无需修改,直接将用户输入的账号或手机号传给 username 字段即可:
// 原有代码无需修改
login({
username: this.loginForm.username, // 可以是账号或手机号
password: this.loginForm.password,
code: this.loginForm.code,
uuid: this.loginForm.uuid
})
此次改造实现了用户登录方式的灵活化,用户可以根据自己的习惯选择使用账号或手机号登录,提升了用户体验。同时保持了系统的安全性和稳定性,对现有功能完全兼容。