用户注册验证

操作步骤:(拆分需求)
1>效验参数不能为空
2>两次输入的密码是否一样
3>效验手机号码是否正确
4>效验手机号码是否唯一
5>效验短信验证码是否正确
6>注册注意点:核心属性 必须自己控制

1>验证手机号码是否已经被注册过

controller

  @GetMapping("/checkPhone")public Object checkPhone(String phone){return userInfoService.checkPhone(phone);}

service (页面需要的是一个boolean值)

 /*** 通过phone 查询用户* @param phone* @return*/Boolean checkPhone(String phone);@Overridepublic Boolean checkPhone(String phone) {UserInfo userInfo = repository.findByPhone(phone);return userInfo != null; //为空表示不存在}

2>生成一个随机且唯一的验证码,发送给用户

#### 短信验证码发送操作逻辑:
​   1>点击按钮发送短信到注册那个手机号码上
​   2>注册手机收到短信验证码,并输入
​   3>低级注册携带短信验证码,判断验证码是否正确
​   4>将code缓存到redis对象,并设置过期时间

controller类

@GetMapping("/sendVerifyCode")public Object sendVerifyCode(String phone){userInfoService.sendVerifyCode(phone);return JsonResult.success();}

service业务层

 /*** 发送短信验证码* @param phone*/void sendVerifyCode(String phone);/*** 发送验证码* @param phone*/@Overridepublic void sendVerifyCode(String phone) {//创建4位数的验证码(随机,唯一)String code = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 4);//拼接短信验证码提示信息StringBuilder sb = new StringBuilder(50);sb.append("您注册的验证码是:").append(code).append(",请在").append(Consts.VERIFY_CODE_VAI_TIME).append("分钟内提交");//假装发短信System.out.println(sb);//真是发送短信本质就是使用java发起http请求即可//RestTemplate用于发起http请求的工具类/* RestTemplate template = new RestTemplate();String url = "https://way.jd.com/chuangxin/dxjk?mobile={1}&content=【创信】{2}&appkey={3}";String rep = template.getForObject(url, String.class, phone, sb.toString(), "81160ff2102302361058123544194785");System.out.println(rep);*///缓存验证码userInfoRedisService.setVerifyCode(phone, code);}

AssertUtil工具类

public class AssertUtil {public static void hasLength(String value,String msg){//判断传入的数值是否为空if(!StringUtils.hasLength(value)){throw new LogicException(msg);}}//判断两个值是否一致public static void isEquales(String v1, String v2,String msg) {if(v1 == null || v2 == null){throw new LogicException(msg);}if(!v1.equals(v2)){throw new LogicException(msg);}}
}

3>校验注册信息是否正确

操作步骤:(拆分需求)
​   1>效验手机号码是否正确
​   2>效验手机是否已经被注册
​   3>效验注册信息格式是否正确(非空效验,等值效验,长度效验...)
​   4>发送注册短信 验证码
​   5>用户注册

controller (根据前端带过来的数据定义 方法,参数,返回类型)

@PostMapping("/regist")public Object regist(String phone,String nickname,String password,String rpassword,String verifyCode){userInfoService.regist(phone,nickname,password,rpassword,verifyCode);return JsonResult.success();}

service业务层

/*** 用户注册信息* @param phone* @param nickname* @param password* @param rpassword* @param verifyCode*/void regist(String phone, String nickname, String password, String rpassword, String verifyCode);@Overridepublic void regist(String phone, String nickname, String password, String rpassword, String verifyCode) {//判断验证信息是否为空AssertUtil.hasLength(phone, "手机号码不能为空");AssertUtil.hasLength(nickname, "昵称不能为空");AssertUtil.hasLength(password, "密码不能为空");AssertUtil.hasLength(rpassword, "确认密码不能为空");AssertUtil.hasLength(verifyCode, "验证码不能为空");//验证两次输入的密码是否一样AssertUtil.isEquales(password,rpassword);//验证手机号码是否存在if(this.checkPhone(phone)){throw new LogicException("手机号码已经存在");}//校验短信验证码是否正确String code = userInfoRedisService.getVerifyCode(phone);if(!verifyCode.equalsIgnoreCase(code)){throw new LogicException("验证码输入有误");}UserInfo userInfo = new UserInfo();//把用户数据设置到对象中userInfo.setNickname("靓仔");userInfo.setPhone(phone);userInfo.setEmail("123@qq.com");userInfo.setPassword(password);userInfo.setGender(1);//1表示男userInfo.setLevel(0);//用户级别userInfo.setCity("广州");userInfo.setHeadImgUrl("/images/default.jpg");//头像路径userInfo.setInfo("");//个性签名userInfo.setState(0);//状态//保存用户对象repository.save(userInfo);}

自定义逻辑异常

/*** 自定义的异常* 1:用于区分系统异常与主动抛出的异常*/
public class LogicException extends RuntimeException{public LogicException(String msg){super(msg);}
}

统一异常处理

@ControllerAdvice
public class CommonExceptionHandler {@ExceptionHandler(LogicException.class)@ResponseBodypublic Object logicExp(Exception e, HttpServletResponse resp){//打印捕获到的异常信息e.getStackTrace();//设置编码格式resp.setContentType("application/json;charset=utf-8");return JsonResult.error(JsonResult.CODE_ERROR_PARAM, e.getMessage(), null);}@ExceptionHandler(RuntimeException.class)@ResponseBodypublic Object runtimeExp(Exception e, HttpServletResponse resp){//打印捕获到的异常信息e.getStackTrace();//设置编码格式resp.setContentType("application/json;charset=utf-8");return JsonResult.defaultError();}
}

4>验证通过跳转到登录界面

使用令牌方式登录流程:

1>通过请求获取username跟password,查看数据库得到用户对象user2>通过user对象判断user是否为nll,如果是null提示信息,如果不为null表示登录成功3>通过UUID方式创建token令牌(要求唯一,随机)String token = UUID.randomUUID()..
4>以token为key,用户对象为user作为value缓存到redis数据库中,token的有效时间设置为30分钟5>将token跟user对象使用接送格式返回浏览器6>浏览器接收并解析响应数据得到token跟user对象,缓存到cookie{此时的cookie也设置有小时间是30分钟]7>第二次访问接口时,前端发请求时,将浏览器中缓存的token数据添加到请求头中,跟请求参数一起携带到服务器8>服务器端通过请求对象,调用getHeander("token")得到前端传过来的token数据9>判断user对象是否为null,决定当前是否已经登录1>如果user为null,表示没有登录2>如果user不是null,表示已经登录此时需要重置token的有效时间[30分钟]

controller类

    @PostMapping("/login")public Object login(String username,String password){//通过用户传进来的 username, password 查询数据库中的用户信息UserInfo user = userInfoService.login(username, password);//给用户设置对应的令牌(随机,唯一)作为标识String token = userInfoRedisService.setToken(user);//把token,user存到reids中HashMap<String, Object> map = new HashMap<>();map.put("user", user);map.put("token", token);return JsonResult.success(map);}

service业务层

/*** 用户登录信息* @param username* @param password* @return*/UserInfo login(String username, String password);@Overridepublic UserInfo login(String username, String password) {//UserInfo user = repository.findByUsernameAndPassword(username,password);//通过用户名查询数据库中是否存在该对象UserInfo user = repository.findByPhone(username);//账号不存在或密码不正确,抛出异常if(user == null || !user.getPassword().equals(password)){throw new LogicException("账号或密码错误");}//为了账号安全,再返回之前把密码设置为空(在前端看控制台,不显示密码)user.setPassword("");return user;}

此文及供参考,有需要的请根据自己的前端页面所需要(传入参数,返回值类型,方法映射路径修改)数据进行修改.
最后感谢您的查看,希望此文章能帮到您!

简单实现用户注册验证功能的步骤及代码相关推荐

  1. js与php表单验证,JS简单表单验证功能完整示例

    本文实例讲述了JS简单表单验证功能.分享给大家供大家参考,具体如下: 简单js表单验证demo Document //当用户名获取焦点时 function focus_username(){ docu ...

  2. PHP+MYSQL实现简单的用户注册登录功能

    有必要用一下php+mysql实现一下这个"最基础"的用户功能,(虽然开发可能会用后端云) 基础结构 html+css+JavaScript作前端渲染: php作为后端,mysql ...

  3. Laravel5.8入门系列二,快速实现用户注册登录功能

    一 XAMPP 环境配置 这次我们需要开始使用继承开发环境了,因为我们需要使用数据库,完成用户的登录注册功能. 首先要配置好XAMPP环境,我们需要添加一个vhost,指向blog5.8的public ...

  4. dz邮箱验证怎么设置_详细步骤!Discuz如何设置通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)实现论坛邮箱验证功能...

    论坛如何实现邮箱功能呢?今天研究了半天,最终终于成功了. 在网上找了一堆资料也没有一个靠谱的资料,所以在这里记录下我的步骤和方法,希望可以给其他小伙伴一点参考和帮助. 实现思路: 通过注册腾讯企业邮箱 ...

  5. Javaweb 实现简单的用户注册登录(含数据库访问功能)

    Javaweb 实现简单的用户注册登录(含数据库访问功能) 实现效果图: 登录界面: 登陆成功: 登陆失败: 注册界面: 注册成功: 1.登录界面login.jsp <%@ page langu ...

  6. 用户注册信息验证功能(前端+后台)

    一.写在前面罗里吧嗦的话 最近在写自己的第一个个人项目,开始写了很久了,但是每天没啥时间记录,趁着周末先记录一些思路和踩过的坑. 项目预计是做一个关于家装的电商网站,样式参考自土巴兔网站(我不是打广告 ...

  7. css3 滑动验证,Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)

    vue验证滑块功能,在生活中很多地方都可以见到,那么使用起来非常方便,基于vue如何实现滑块验证呢?下面通过代码给大家讲解. 效果图如下所示: 拖动前 拖动后 代码引用的css与js都是线上的 将代码 ...

  8. 简单的短信验证功能的实现

    相信有很多朋友在做三方登陆的时候会加入短信验证的功能,最近刚好被分配安排实现这一需求,本人新手一枚,特地去网上搜了资料,目前用的比较多的大汉.云通讯还有MOB的smssdk,对比之下,最终选择了完全免 ...

  9. android网络编程登录和验证,ASP.NET实现用户注册和验证功能(第4节)

    在前几篇文章中小编已经为大家分享几篇关于验证控件实现的文章,今天我们再具体为用户登录页面添加输入数据验证功能和验证码功能. 学习内容 1.创建ASP.NET应用程序. 在E:\Solution1目录下 ...

  10. 利用第三方服务平台实现简单的短信验证功能

    在本篇文章中,将会利用第三方服务平台实现短信验证功能. 首先,先介绍一下刚才提及的第三方服务平台:mob.com 移动开发者服务平台 该平台呢,主要有以下几点功能: 1.为IOS.Android的AP ...

最新文章

  1. python3类的继承详解_python3中类的继承以及self和super的区别详解
  2. Linux互斥锁的使用代码实现
  3. 前端学习(2197):__WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor
  4. Redis五种数据结构应用场景
  5. 零窗口探测怎么抓包_万事俱备,只待“窗口”!航天任务中的重要环节:“发射窗口”!...
  6. 【JZOF】已知前序遍历和中序遍历,求出其后序遍历
  7. 【机器学习】端到端机器学习实践
  8. 【职场日语】日文简历模板
  9. Latex论文下载学习教程
  10. Intellj(IDEA)部署新项目, “warning no artifacts configured” 完美解决方案
  11. iPhone 14来了,苹果13和14区别,值不值得买
  12. 回看科技股泡沫:区块链崛起恰逢其时,相当于1996年的互联网
  13. 古城钟楼的微博报时是如何实现的?[科普贴]
  14. 为什么可以做Shopyy独立站
  15. django批量修改table_Django 使用 modelformset 组件批量修改表单数据
  16. 局域网win7计算机如何互访,局域网Win7与WinXP电脑不能互访怎么办?
  17. java毕业设计_短视频分享网站
  18. 毫米波雷达(一):原理
  19. rdesktop参数
  20. 如何开通微信支付和支付宝支付0.2%(千分之二)费率(最全攻略)

热门文章

  1. 2021-2004中国环境统计年鉴面板数据、环境面板数据
  2. 网易云通信 java 登录,网易云IM(即时通讯) 集成指南(Android)
  3. SSM框架:MyBatis
  4. 淘宝客、返利机器人详细解读(个人理解)
  5. (Pr)Premiere Pro 2022 软件下载+Pr安装教程
  6. 清明上河图30亿像素_清明上河图全图下载
  7. 怎样将PDF转成表格?超赞的两种PDF转Excel方法
  8. emos mysql_企业邮件部署详细步骤(EMOS)
  9. 微信小程序云开发-支付
  10. 工资短信生成器如何使用