发送手机,邮箱验证码

26 篇文章 0 订阅
26 篇文章 0 订阅

一、发送邮箱,使用hutool工具包

使用aliyun邮箱作为发件邮箱,需要在邮箱中开启代收功能

1、引入依赖

userController代码

   @GetMapping("/sendCodeEmail")
    public Integer sendCodeEmail(String mel){
        return userService.sendCodeEmail(mel);
    }

userService代码

public Integer sendCodeEmail(String email){
        MailAccount account = new MailAccount();
        account.setHost("smtp.aliyun.com");
        account.setPort(25);
        account.setAuth(true);
        account.setFrom("这里填入发件邮箱地址。。。");
        account.setUser("这里填入发件邮箱地址。。。");
        account.setPass("lj297014");
        int code = RandomUtil.randomInt(1000, 9999);
        //使用hutool格式化工具
        String content = StrUtil.format("您的验证码是:<B>{}<B>", code);
        MailUtil.send(account, CollUtil.newArrayList(email), "测试邮件发送接口", content, true);
        return 0;
    }

二、发送手机验证码

使用aliyun的短信服务

进入阿里云短信服务官网

拿到appcode

UserController代码

@GetMapping("/sendCodeTel")
    public Integer sendCodeTel(String tel){
        return userService.sendCodeTel(tel);
    }

UserService代码

public Integer sendCodeTel(String tel){
        String host = "https://dfsns.market.alicloudapi.com/data/send_sms";
        int code = RandomUtil.randomInt(1111, 9999);
        String result = HttpRequest.post(host)
                .header("Authorization", "APPCODE "+"填入你的appcode码")
                .body(StrUtil.format("content=code:{}&template_id=TPL_0000&phone_number={}", code, tel))
                .execute().body();
        JSONObject resultJosn = JSONUtil.parseObj(result);
        if(resultJosn.get("status").equals("ok")){
           // mapCodes.put(tel,String.valueOf(code));
            return 0;
        }
        throw new BizException(509,"短信发送失败");

    }

 三、在注册方法中进行验证

使用hutool中带有缓存时间的map数组<电话或邮箱,验证码>进行存储 

  设置一分钟清理下缓存

在注册方法中拿到mapCode里的验证码和前端传入的验证码进行判断

代码

UserController

    @PostMapping("/rigister")
    public Integer rigister(@RequestBody UserRegisterDto userRegisterDto){
        return userService.rigister(userRegisterDto);
    }

UserService 

 public Integer rigister(UserRegisterDto userRegisterDto) {
        //使用邮箱验证验证码
        String email = userRegisterDto.getEmail();
        String code = userRegisterDto.getCode();
        String codeMap = mapCodes.get(email, false);
        if(!codeMap.equals(code)){
            throw new BizException(600,"邮箱验证码不正确");
        }
//        //使用手机验证验证码
//        String tel = userRegisterDto.getTel();
//        String code = userRegisterDto.getCode();
//        String codeMap = mapCodes.get(tel, false);
//        if(!codeMap.equals(code)){
//            throw new BizException(600,"邮箱验证码不正确");
//        }

        boolean ismobile = Validator.isMobile(userRegisterDto.getTel());
        if(ismobile == false){
            throw new BizException(503,"请输入正确的手机号");
        }
        boolean isemail = Validator.isEmail(userRegisterDto.getEmail());
        if (isemail == false){
            throw new BizException(504,"请输入正确的邮箱");
        }
        boolean isMatch = ReUtil.isMatch("^\\d{6}$", userRegisterDto.getPassword());
        if (isMatch == false){
            throw new BizException(505,"请输入至少6位数字的密码");
        }
        User user1 = userDao.selectBytel(userRegisterDto.getTel());
        if (!ObjUtil.isEmpty(user1)){
            throw new BizException(506,"用户已经存在");
        }
        //插入到用户表
        userDao.insert(userRegisterDto);
        return 0;
    }
}

四、用到的技术,遇到的问题

2、hutool工具代替上面map集合,可设置保存时间

hutool工具对象转换

在查询语句中写上limit 1后,表示找到数据就不再扫描查询后面的表了

验证密码

使用hutool里面的校验工具

可以在网站中找:正则表达式在线测试 | 菜鸟工具 (jyshare.com)

我这里选用的是数字

在使用发短信时,appcode后面要加上个空格

 在注册页面取验证码时,一定要加false,要不然会无限刷新

缓存(Hutool-cache) - 超时-TimedCache - 《Hutool v5.6.0 参考文档》 - 书栈网 · BookStack 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现发送手机短信验证码邮箱验证码的注册登录功能,需要以下几个步骤: 1. 获取用户输入的手机号码/邮箱地址,生成随机验证码,将验证码保存到服务器端。 2. 调用第三方短信/邮件接口,将验证码发送给用户。 3. 用户输入收到的验证码,与服务器保存的验证码进行比对。 4. 如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 下面以 Java Web 项目为例,介绍如何实现发送手机短信验证码邮箱验证码的注册登录功能。 1. 发送手机短信验证码 (1)在 JSP 页面上添加输入手机号码的表单,并在表单提交时调用 Servlet 处理用户请求。 (2)在 Servlet 中生成随机验证码,并将验证码保存到 session 中。 (3)调用短信接口,将验证码发送到用户手机上。 (4)在 JSP 页面上添加输入验证码的表单,并在表单提交时调用 Servlet 进行比对。 (5)如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 2. 发送邮箱验证码 (1)在 JSP 页面上添加输入邮箱地址的表单,并在表单提交时调用 Servlet 处理用户请求。 (2)在 Servlet 中生成随机验证码,并将验证码保存到 session 中。 (3)调用邮件接口,将验证码发送到用户邮箱中。 (4)在 JSP 页面上添加输入验证码的表单,并在表单提交时调用 Servlet 进行比对。 (5)如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 以上就是使用 Java Web 技术实现发送手机短信验证码邮箱验证码的注册登录功能的大致步骤,具体实现方式可以根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值