1.发送验证码

1.发送post请求 数据封装在map 获取map的手机号码

2.调用service层将手机号码 传入过去

3.正常返回状态码200

@RestController
@RequestMapping("/user")
public class LoginController {@Autowiredprivate UserService userService;/*** 获取登录验证码*   请求参数:phone (Map)*   响应:void*/@PostMapping("/login")public ResponseEntity login(@RequestBody Map map){String phone =(String) map.get("phone");userService.sendMsg(phone);return ResponseEntity.ok(null); //正常返回状态码200}
}

1.随机生成6位数字验证码

2.将验证码存入reids 使用固定前缀+手机号码 过期时间5分钟

@Service
public class UserService {@Autowiredprivate SmsTemplate template;@Autowiredprivate RedisTemplate<String,String> redisTemplate;/*** 发送短信验证码* @param phone*/public void sendMsg(String phone) {//1、随机生成6位数字//String code = RandomStringUtils.randomNumeric(6);String code = "123456";//2、调用template对象,发送手机短信//template.sendSms(phone,code);//3、将验证码存入到redisredisTemplate.opsForValue().set("CHECK_CODE_"+phone,code, Duration.ofMinutes(5));}}

2.用户登录

1.从map中获得手机号码 和 验证码

2.调用service层 传入手机号码 和验证码

3.返回map map里必须要有token信息 和 isNew 是否新用户

    /*** 检验登录*/@PostMapping("/loginVerification")public ResponseEntity loginVerification(@RequestBody Map map) {//1、调用map集合获取请求参数String phone = (String) map.get("phone");String code = (String) map.get("verificationCode");//2、调用userService完成用户登录Map retMap = userService.loginVerification(phone,code);//3、构造返回return ResponseEntity.ok(retMap);}

4.从redis获取验证码

5.对redis验证码进行一个非空判断(防止已经删除了) 与 对传入来的验证码进行一个校验 如果

redis验证码非空 或 验证码错误 则抛出异常

6.删除redis存的验证码(防止重复使用)

7.创建一个boolean值 isNew 默认是false(不是新用户)

8.调用api传入手机号 查找用户

9.判断用户是否存在

8.如果不存在就是新用户 重新new一个(因为没查找出来是null 必须在new一个) 设置他的手机

号码 以及密码(密码默认123456 md5加密) 然后保存 返回它的用户id(这里我有点不懂 insert 之后

为什么user 就有id)

9.将id设置给user isNew=true 表示是个新用户

10.创建map 存入id和手机号码 使用jwt加密成token

11.创建map保存数据 将生成的token存入进去 和 isNew 返回给controller层

/*** 验证登录* @param phone* @param code*/public Map loginVerification(String phone, String code) {//1、从redis中获取下发的验证码String redisCode = redisTemplate.opsForValue().get("CHECK_CODE_" + phone);//2、对验证码进行校验(验证码是否存在,是否和输入的验证码一致)if(StringUtils.isEmpty(redisCode) || !redisCode.equals(code)) {//验证码无效throw new RuntimeException();}//3、删除redis中的验证码redisTemplate.delete("CHECK_CODE_" + phone);//4、通过手机号码查询用户User user = userApi.findByMobile(phone);boolean isNew = false;//5、如果用户不存在,创建用户保存到数据库中if(user == null) {user = new User();user.setMobile(phone);user.setPassword(DigestUtils.md5Hex("123456"));Long userId = userApi.save(user);user.setId(userId);isNew = true;}//6、通过JWT生成token(存入id和手机号码)Map tokenMap = new HashMap();tokenMap.put("id",user.getId());tokenMap.put("mobile",phone);String token = JwtUtils.getToken(tokenMap);//7、构造返回值Map retMap = new HashMap();retMap.put("token",token);retMap.put("isNew",isNew);return retMap;}

【探花交友】用户登录总结相关推荐

  1. 【探花交友DAY 02】项目搭建和用户登录功能的实现

    1. 项目介绍 探花交友是一个陌生人的在线交友平台,在该平台中可以搜索附近的人,查看好友动态,平台还会通过大数据计算进行智能推荐,通过智能推荐可以找到更加匹配的好友,这样才能增进用户对产品的喜爱度.探 ...

  2. #博学谷it学习技术支持#探花交友项目:用户登录

    #博学谷it学习技术支持#探花交友项目:用户登录 目录: 一.基本执行流程 二.Service模块内容的编写: 三.Dabbo模块下: 四.model(实体类)模块下: 五.思维导图 正文: 用户登录 ...

  3. 探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍

    探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍 文章目录 探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍 2.项目介绍 2.1.项目背景 2.2.市场分析 2.3.目标用户 ...

  4. 探花交友_第1章_项目介绍以及实现登录功能_第1节_功能介绍

    探花交友_第1章_项目介绍以及实现登录功能_第1节_功能介绍 文章目录 探花交友_第1章_项目介绍以及实现登录功能_第1节_功能介绍 1.功能介绍 1.1.功能列表 1.2.注册登录 1.3.交友 1 ...

  5. 黑马探花交友----1.项目搭建-注册登录-完善个人信息

    学习目标: 项目的功能介绍 工程搭建 短信验证码 阿里云OSS服务应用 人脸识别 完善个人信息 1.社交介绍 1.1.项目背景 在线社交是互联网时代的产物,已成为互联网用户的基础需求之一.移动互联网自 ...

  6. 探花交友10-数据统计与内容审核

    1.用户冻结解冻 用户冻结/解冻使用管理员在后台系统对用户的惩罚措施.对于发布不当言论或者违法违规内容的用户,可以暂时.永久禁止其登录,评论,发布动态. 后台中解冻/冻结,就是将用户状态写入数据库中 ...

  7. 【探花交友DAY 11】定时统计任务和自动内容审核

    1. 用户的冻结与解冻 用户冻结/解冻使用管理员在后台系统对用户的惩罚措施.对于发布不当言论或者违法违规内容的用户,可以暂时.永久禁止其登录,评论,发布动态等行为. 管理员在管理系统中对某一个用户冻结 ...

  8. 探花交友_第2章-完善个人信息与MongoDB入门

    探花交友_第2章-完善个人信息与MongoDB入门 文章目录 探花交友_第2章-完善个人信息与MongoDB入门 1.完善个人信息 1.1.图片上传 1.1.1.图片存储解决方案 1.1.2.阿里云O ...

  9. 【探花交友】day06—即时通信

    目录 1.即时通信 1.1.什么是即时通信?​编辑 1.2.功能说明 1.3.技术方案 2.环信 2.1.开发简介 2.2.环信Console 2.3.接口说明 3.抽取环信组件 3.1.编写Huan ...

最新文章

  1. 【位运算】解题报告:luoguP4310 绝世好题(位运算优化DP)
  2. php 随机调用文章,zblog PHP调用热门文章、随机文章和热评文章代码
  3. Chrome原生工具实现长截图
  4. WebService入门Demo
  5. ubuntu 16.4 安装postgreSQL,使C++链接到数据库
  6. c语言学习进阶-C语言程序实现矩阵乘法
  7. windows 2003 server无法远程桌面连接
  8. node中exports和module.exports的关系及使用
  9. 零基础怎么学计算机编程!看完的你,应该会恍然大悟!
  10. 最新北京市生活常用电话一览表
  11. 毕设全记录——探索 JavaBDD
  12. 抓取腾讯校园招聘的第一页
  13. 将二维数组中最大值的 行和列的下标打印出来
  14. 计算机硬件组成框图,以及各部件的作用及计算机系统的主要技术指标概念理解
  15. 基于51单片机的LED彩灯控制器设计
  16. 读书笔记:少有人走的路
  17. 高德地图哪个语音包最好_高德地图VS百度地图,哪个更靠谱?
  18. STM32学习(一)
  19. java的八种基本数据类型
  20. c语言数据类型习题,C语言-数据类型习题及答案.doc

热门文章

  1. 【BZOJ3172】[TJOI2013] 单词(AC自动机的小应用)
  2. 广告收入7年来首次下滑,千万粉UP主4个月无商单,自媒体还能好好恰饭吗?
  3. CTF学习笔记:misc
  4. oracle日期转数值的函数,oracle数据库内置函数之数值函数、字符函数、日期函数、转换函数及其在查询语句中的运用...
  5. 机械设备远程实时监控方案
  6. MIDI 128种音色码表
  7. Java学习笔记(二):Java程序基础
  8. 微信开发之使用第三方图文编辑器
  9. 原神它的认可任务如何完成
  10. 行列式的两种计算方法