redis实战05-实现短信验证码登录和注册功能

目录

前端流程

后端实现

测试验证


前端流程

后端实现

找到对应的后端Controller方法

前端提交的是json格式的数据,后端要接收该数据需要使用RequestBody注解并提供对应的实体类。我们来看看实体类LoginFormDTO:

可以看到,有三个成员变量,分别对应手机号、验证码、密码。有密码字段是因为登录不仅可以验证码登录,也可以密码登录。

该Controller方法还有一个session参数,用于验证码校验,当校验成功时,把用户信息存入session。

修改Controller方法:

创建接口方法

实现接口方法

编写业务

代码分析

String phone = loginForm.getPhone();
if(RegexUtils.isPhoneInvalid(phone)){
    return Result.fail("手机号格式错误!");
}

通过 RegexUtils.isPhoneInvalid(phone) 校验手机号的格式。如果手机号不符合预期格式,则返回错误提示,Result.fail("手机号格式错误!")

Object cacheCode = session.getAttribute("code");
String code = loginForm.getCode();
if(cacheCode == null || !cacheCode.toString().equals(code)){
    return Result.fail("验证码错误");
}

session 中获取存储的验证码,并与用户提交的 loginForm.getCode() 进行比较。如果验证码不匹配,返回错误提示,Result.fail("验证码错误")

User user = query().eq("phone",phone).one();

根据手机号从数据库中查询用户,query().eq("phone",phone).one()

if(user == null){
    user = createUserWithPhone(phone);
}

如果用户不存在,则调用 createUserWithPhone(phone) 创建新用户并保存到数据库。

session.setAttribute("user",user);

登录成功后,将用户信息保存到 session 中,便于后续访问时跟踪用户状态。

return Result.ok();

最后,返回登录成功的结果,Result.ok()

private User createUserWithPhone(String phone) {
    User user = new User();
    user.setPhone(phone);
    user.setNickName(USER_NICK_NAME_PREFIX + RandomUtil.randomString(10));
    save(user);
    return user;
}
  • User 对象被初始化,并为其设置手机号。
  • 通过 RandomUtil.randomString(10) 随机生成一个 10 位长度的昵称,并为用户设置昵称,昵称以 USER_NICK_NAME_PREFIX 作为前缀。
  • 最后,将用户信息保存到数据库,并返回新创建的用户对象。

测试验证

前端使用一个手机号,得到验证码后登录,后端数据库会新增一条用户信息,但是前端登录成功后会弹回来,这是因为我们还没有做登录校验功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值