注册

认证服务控制层面

    @PostMapping("/regist")public String regist(@Valid UserRegisteVo vo, BindingResult result, RedirectAttributes redirectAttributes){if (result.hasErrors()){Map<String,String> errors=new HashMap<>();result.getFieldErrors().stream().collect(Collectors.toMap(FieldError::getField, FieldError::getDefaultMessage));//重定向中保存数据redirectAttributes.addFlashAttribute("errors",errors);//校验出错,转到注册页//Request method 'POST' not supported//用户注册->/regist[post]--->转发/reg.html(路径映射默认都是get方式进行访问的.)return  "redirect:http://auth.gulimall.com/reg.html";}//真正的注册//1.校验验证码String code = vo.getCode();String s = redisTemplate.opsForValue().get(AuthServerConstant.SMS_CODE_CACHE_PREFIX + vo.getPhone());if(!StringUtils.isEmpty(s)){if(code.equals(s)){if(code.equals( s.split("_")[0])){//删除验证码redisTemplate.delete(AuthServerConstant.SMS_CODE_CACHE_PREFIX+vo.getPhone());//验证码通过R r = memberFeignService.register(vo);if(r.getCode()==0){//成功return  "redirect:http://auth.gulimall.com/login.html";}else {HashMap<String, String> errors = new HashMap<>();errors.put("msg",r.getData("msg",new TypeReference<String>(){}));redirectAttributes.addFlashAttribute("errors",errors);return  "redirect:http://auth.gulimall.com/reg.html";}}else {HashMap<String, String> errors = new HashMap<>();errors.put("code","验证码错误");redirectAttributes.addFlashAttribute("errord",errors);return  "redirect:http://auth.gulimall.com/reg.html";}}}else{HashMap<String, String> errors = new HashMap<>();errors.put("code","验证码错误");redirectAttributes.addFlashAttribute("errord",errors);return  "redirect:http://auth.gulimall.com/reg.html";}//注册成功返回到登录页return "redirect:https://auth.gulimall.com/login.html";}

运程服务调用

@PostMapping("member/member/registe")R register(@RequestBody UserRegisteVo vo);
    @Overridepublic void regist(MemberRegisterVo vo) {MemberEntity entity = new MemberEntity();MemberDao memberDao = this.baseMapper;MemberLevelEntity levelEntity =memberLevelDao.getDefaultLevel();//设置默认登记entity.setLevelId(levelEntity.getId());//检查用户名和手机号是否唯一checkPhoneUnique(vo.getPhone());checkUsernameUnique(vo.getUserName());entity.setMobile(vo.getPhone());entity.setUsername(vo.getUserName());//密码加密处理BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();String encode = passwordEncoder.encode(vo.getPassword());entity.setPassword(encode);memberDao.insert(entity);}@Overridepublic void checkPhoneUnique(String phone)throws PhoneExistException {MemberDao memberDao = this.baseMapper;Integer count = memberDao.selectCount(new QueryWrapper<MemberEntity>().eq("mobile", phone));if(count>0){throw  new PhoneExistException();}}@Overridepublic void checkUsernameUnique(String username)throws UsernameExistException {MemberDao memberDao = this.baseMapper;Integer count = memberDao.selectCount(new QueryWrapper<MemberEntity>().eq("username", username));if(count>0){throw  new UsernameExistException();}}

异常处理

public class UsernameExistException extends  RuntimeException{public UsernameExistException() {super("用户名已存在");}
}
public class PhoneExistException extends  RuntimeException{public PhoneExistException() {super("电话已存在");}}
    @Overridepublic void checkPhoneUnique(String phone)throws PhoneExistException {MemberDao memberDao = this.baseMapper;Integer count = memberDao.selectCount(new QueryWrapper<MemberEntity>().eq("mobile", phone));if(count>0){throw  new PhoneExistException();}}@Overridepublic void checkUsernameUnique(String username)throws UsernameExistException {MemberDao memberDao = this.baseMapper;Integer count = memberDao.selectCount(new QueryWrapper<MemberEntity>().eq("username", username));if(count>0){throw  new UsernameExistException();}}

登录

认证服务控制层面

   @PostMapping("/login")public String login(@RequestBody UserLoginVo vo,RedirectAttributes redirectAttributes){//运程登录R login = memberFeignService.login(vo);if(login.getCode()==0){//成功return "redirect:https://gulimall.com";}else {//失败HashMap<String,String> errors=new HashMap<>();errors.put("msg",login.getData("msg",new TypeReference<String>(){}));redirectAttributes.addFlashAttribute("errors",errors);return "redirect:https://auth.gulimall.com/login.html";}}

运程调用服务

@PostMapping("member/member/login")R login(@RequestBody UserLoginVo vo);
    @Overridepublic MemberEntity login(MemberLoginVo vo) {String loginacct = vo.getLoginacct();String password = vo.getPassword();//1.去数据库查询MemberDao baseMapper = this.baseMapper;MemberEntity entity = baseMapper.selectOne(new QueryWrapper<MemberEntity>().eq("username", loginacct).or().eq("mobile", loginacct));if(entity==null){//登录失败return null;}else{//1.获取数据库中密码String passwordDb = entity.getPassword();BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();//2.判断是否匹配boolean matches = encoder.matches(password, passwordDb);if(matches){return entity;}else{return  null;}}}

错误枚举类新增

USER_EXIST_EXCEPTION(15001,"用户存在异常"),
PHONE_EXIST_EXCEPTION(15002,"手机号存在异常"),
LOGINACCT_PASSWORD_INVAILD_EXCEPTION(15003,"账号或密码错误")

vo对象

UserLoginVo

@Data
public class UserLoginVo {private  String loginacct;private  String password;}

UserRegisteVo

@Data
public class UserRegisteVo {@NotEmpty(message = "用户名必须提交")@Length(min = 6,max = 18,message = "用户名必须是6-18位字符")private  String userName;@NotEmpty(message = "密码必须填写")@Length(min = 6,max = 18,message = "密码必须是6-18位字符")private  String password;@NotEmpty(message = "手机号必须填写")@Pattern(regexp = "^[1]([3-9]{9}$)",message = "手机号格式不正确")private  String phone;@NotEmpty(message = "验证码必须填写")private  String code;}

认证服务:注册和登录相关推荐

  1. php redis 用户注册,redis+php实现微博(一)注册与登录功能详解

    本文实例讲述了redis+php实现微博注册与登录功能.分享给大家供大家参考,具体如下: (一).微博功能概况 微博用户账号注册 微博用户登录 微博发布 添加微博好友(粉丝) 微博推送 微博冷数据写入 ...

  2. python基础代码库-python基础--注册和登录功能 代码

    注册和登录功能单用户版 注册 count = 0 while count < 3: username_inp = input('请输入你的用户名:') pwd_inp = input('请输入你 ...

  3. mysql和php的登录注册界面_php实现注册和登录界面的方法

    本篇文章主要介绍php实现注册和登录界面的方法,感兴趣的朋友参考下,希望对大家有所帮助. 当初我觉得一个网站上注册和登录这两个功能很神奇,后来自己研究一下发现其实道理很简单,接下来看一下怎么实现的吧. ...

  4. java项目(注册和登录(成功后查看商品的信息))

    文章目录 声明 第一步: 第二步: 第三步: 第四步: 第五步 第六步: 第七步: 声明 题目:实现登录和注册功能 登录成功后可以查看所有商品的信息(商品名称,价格,销量) 第一步: package ...

  5. 注册和登录还有那个加密的密码

    假设你在设计自己的系统的时候采用的是MVC架构.例如 也许可能有很多童鞋会这样设计Service和Model. service: public class AccountService {     p ...

  6. sprongboot mysql登录注册_后端开发:SpringBoot实现注册与登录功能

    这次实现的注册与登录功能需要进行数据库的基本操作,而且是前后端分离式开发.总的来说就是首先进行数据库的设计,然后根据数据库进行编写服务端API接口,接着来到客户端或移动端,进行登录与注册的界面设计,接 ...

  7. android注册文件打开,Android项目实战系列—基于博学谷(三)注册与登录模块

    由于这个模块内容较多,篇幅较长,请耐心阅读. 注册与登录模块分为三个部分 [x] [欢迎界面]() [x] [注册界面]() [x] [登录界面]() 一.欢迎界面 1.创建工程,命名为BoXueGu ...

  8. C语言--使用fopen、fgets、fprintf(标准IO)实现注册、登录、功能--(完整代码-分文件)

    目录 功能 使用到的函数: 代码如下 main.c login.c login.h 功能 将注册的用户名密码,保存到本地文件中(User.txt)(创建在当前执行目录下了) 对文件的新建,打开,读写, ...

  9. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之注册与登录监听

    一.引言 在数据库和静态页面都创建好之后,下面就该接着完成后台Node.js监听注册和登录的部分了.这个部分主要使用的技术是:Node.js的Express框架和ajax异步请求.登录和注册的代码实现 ...

  10. App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计

    一.为什么需要注册和登录? 是否需要注册和登录的关键取决于产品形态. 如果用户注册登录对于用户需求.产品功能.商业模式本身带不来任何价值的话,就没必要设计这样的功能.比如一些实用工具类的产品:计算器. ...

最新文章

  1. 测试适合眉形的软件_软件测试的自我修养:正向思维与逆向思维
  2. 我能不能理解成 ssh中service就相当于与jsp+servlet+dao中的servlet???
  3. Android UI开发第二十七篇——实现左右划出菜单
  4. 第二代飞信机器人“小达”问世了
  5. js并发上传文件到不同服务器,simple-uploader.js 功能强大的上传组件 - 文章教程
  6. 项目计划与控制-若干题目
  7. 求一天的起始和结束(时间戳)和一个月的第一天和最后一天
  8. web端实现类微信的语音播放效果
  9. 吉哥系列故事——礼尚往来
  10. 译文|Apache Pulsar 如何保证消息不丢不重?
  11. xfce实现桌面图标透明
  12. CDH大数据平台搭建之HADOOP分布式集群搭建
  13. 第四章-2 hydra(九头蛇)与Medusa(美杜莎)
  14. 《Java并发编程的艺术》——锁(笔记)
  15. linux达人养成计划i,Linux达人养成计划 I
  16. CSS中padding属性的参数顺序
  17. reactive函数实现响应式数据
  18. ios打包证书申请流程
  19. 《变量:大国的腾挪》摘记
  20. Java求解一元二次方程+单元测试(IDEA+Junit)

热门文章

  1. 从“旅行青蛙”到“跳一跳”,看产品的场景设计和心智阶梯
  2. 隐藏驱动,绕过XueTr 0.39检测
  3. mssqlserver系统表
  4. matlab中电流调节器仿真模型,直流调速系统的matlab仿真(课程设计作业).docx
  5. html5 新手引导插件,实现“新手引导”效果
  6. HGAME 2017 or 2018 PWN levels
  7. 绩效管理软件哪个好?企业如何建立绩效考核体系?
  8. EGE-小游戏制作指南
  9. eclipse导入java web项目_Eclipse中轻松导入web项目的方法
  10. Logistic Regression with Python