开发喵星球

若依实现手机号/邮箱/用户名多种登录方式(六十六)

在实际业务需求中,登录功能,可能不只是简单的通过用户+密码的方式进行登录,有时候需要实现用户可以通过手机号,邮箱,用户名等方式进行登录。

一、导入依赖

在ruoyi-common模块中引入hutool依赖包。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.23</version>
</dependency>

二、实现登录接口

/**
 * 登录
 *
 * @param username 用户名称
 * @param password 用户密码
 * @return
 */
@ResponseBody
@PostMapping("/login")
public AjaxResult login(String username, String password) {
    if (StrUtil.isEmpty(username)) {
        return AjaxResult.error("登录名称不能空");
    }
    if (StrUtil.isEmpty(password)) {
        return AjaxResult.error("登录密码不能空");
    }
    UsernamePasswordToken token = new UsernamePasswordToken(username, password, false);
    Subject subject = SecurityUtils.getSubject();
    try {
        subject.login(token);
        return AjaxResult.success("登录成功");
    } catch (AuthenticationException e) {
         return AjaxResult.error("登录名称或密码错误");
    }
}

三、手机号/邮箱登录逻辑

在ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysLoginService.java中login方法里加入以下代码。

//判断是否是手机号
boolean isPhone = ReUtil.isMatch(RegexPool.MOBILE, username);
//判断是否是邮箱
boolean isEmail = ReUtil.isMatch(RegexPool.EMAIL, username);
//如果用户为空且用户名是手机号,则通过手机号查询用户信息
if (user == null && isPhone) {
    user = userService.selectUserByPhoneNumber(username);
}
//如果用户为空且用户名是邮箱,则通过邮箱查询用户信息
if (user == null && isEmail) {
    user = userService.selectUserByEmail(username);
}

三、接口功能测试

1. 通过用户名+密码方式登录

2. 通过手机号+密码方式登录

3. 通过邮箱+密码方式登录

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2023-12-11 20:33:48 阅读量:227
<<   >>


powered by kaifamiao