牛客网项目-开发注册功能

news2025/7/21 5:04:56

前言

本文是对牛客网项目的总结,本文主要讲解页面注册逻辑

  1. 当我们点击首页的注册按钮时,会跳转到注册页面,然后再祖册页面提交账号,密码邮箱后会跳转到首页或者直接登录页面进行登录,这个操作可以自己设定

【设计逻辑】 

  1. 访问注册页面
    • 点击区域内的连接打开注册页面
  2. 提交注册数据
    • 通过表单提交数据
    • 服务端验证账号是否存在,邮箱是否已经注册服务端发送激活邮件

  3. 激活注册账号
    • 点击邮件中的连接,访问服务端激活服务。

首先两点在于

1、进行服务端的校验工作,首先用户名可以设置为唯一操作,其次密码长度校验,然后邮箱唯一性正确性的校验。

2、激活账号,我们会生成一个连接发送到邮箱中,执行服务端的账号激活业务。

【Service层】

public Map<String, Object> register(User user) {
        Map<String, Object> map = new HashMap<>();
        if (user == null) {
            throw new IllegalArgumentException("参数不能为空");
        }
        if (StrUtil.isBlank(user.getUsername())) {
            map.put("usernameMessage", "账号不能为空");
            return map;
        }
        if (StrUtil.isBlank(user.getPassword())) {
            map.put("passwordMessage", "密码不能为空");
            return map;
        }
        User u = userMapper.selectByName(user.getUsername());
        if (u != null) {
            map.put("usernameMessage", "账号已经存在");
            return map;
        }
        u = userMapper.selectByEmail(user.getEmail());
        if (u != null) {
            map.put("emailMessage", "邮箱已经存在");
            return map;
        }
        // 注册用户--设置默认的值
        user.setSalt(CommunityUtil.getRandom5());
        user.setPassword(CommunityUtil.getMd5(user.getPassword() + user.getSalt()));
        user.setType(0);
        // 状态参数为0表示用户尚未激活
        user.setStatus(0);
        // 生成激活码。
        user.setActivationCode(CommunityUtil.getUUID());
        user.setHeaderUrl(String.format("http://images.nowcoder.com/head/%dt.png",new Random().nextInt(1000)));
        user.setCreateTime(new Date());
        userMapper.insertUser(user);

        // 发送激活邮件---
        Context context = new Context();
        context.setVariable("email", user.getEmail());
        //"http://localhost:8080/community/activation/101/code";
        String url = domain + contextPath + "/activation" + "/" +user.getId() + "/" + user.getActivationCode();
        context.setVariable("url", url);

        String content = templateEngine.process("/mail/activation", context);
        System.out.println(content);

        mailClient.sendMail(user.getEmail(),"激活账号",content);
        return map;
    }

【controller层】

@PostMapping("/register")
    public String register(Model model, User user) {
        Map<String, Object> map = userService.register(user);
        if (map == null || map.isEmpty()) {
            model.addAttribute("msg", "注册成功");
            model.addAttribute("target", "/index");
            return "/site/operate-result";
        }
        // 失败则继续返回在登陆页面
        model.addAttribute("usernameMsg", map.get("usernameMsg"));
        model.addAttribute("passwordMessage", map.get("passwordMessage"));
        model.addAttribute("emailMessage", map.get("emailMessage"));
        return "/site/register";
    }

邮件发送

由于邮件发送业务也不是很难,这里找了一个相对详细的进行参考。主要分为以下几步

  • 开启邮箱的stmp服务
  • 引入配置
  • 编写代码

Springboot实现发送邮件功能_12程序猿的博客-CSDN博客

【controller层】账号激活逻辑

@GetMapping(path = "/activation/{userId}/{code}")
    public String activation(Model model, @PathVariable("userId") int userId, @PathVariable("code") String code) {
        int result = userService.activation(userId, code);
        if (result == ACTIVATION_SUCCESS) {
            model.addAttribute("msg", "激活成功");
            model.addAttribute("target", "/login");
        } else if (result == ACTIVATION_REPEATE) {
            model.addAttribute("msg", "已经激活");
            model.addAttribute("target", "/index");
        } else {
            model.addAttribute("msg", "激活失败");
            model.addAttribute("target", "/index");
        }
        return "/site/operate-result";
    }

【service层】

public int activation(int id,String code) {
        User user = userMapper.selectById(id);
        // 如果用户状态为1表示已经激活过了
        if (user.getStatus() == 1){
            return ACTIVATION_REPEATE;
            // 否则判断激活码是否正确进行激活
        } else if (user.getActivationCode().equals(code)) {
            userMapper.updateStatus(id,1);
            return ACTIVATION_SUCCESS;
        }
        // 激活码错误,不能激活
        return ACTIVATION_FAIL;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP ABAP BAPI_SALESORDER_CREATEFROMDAT2 成本中心 kostl

BAPI_SALESORDER_CREATEFROMDAT2提供参数无成本中心字段&#xff0c;所以需要用扩展字段实现。 BAPE_VBAK&#xff1a; BAPE_VBAKX VBAKKOZ VBAKKOZX 封装扩展结构&#xff1a; DATA: LS_EXTENSION TYPE BAPIPAREX, LT_EXTENSION TYPE TABLE OF BAPIPAREX. DATA: LS_B…

目标检测论文解读复现之十一:基于特征融合与注意力的遥感图像小目标检测

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

【MySQL】5.触发器

文章目录1. 触发器概述2. 触发器的相关语法3. 触发的NEW与OLD4. 总结1. 触发器概述 触发器&#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段&#xff0c;但是触发器无需调用&#xff0c;当对数据库表中的数据…

python批量读取nc气象数据并转为tif

python批量nc数据转tif 各类地理数据中&#xff0c;NC格式是很常见的&#xff0c;然而这种格式ArcGIS是无法打开的。一旦下载的话nc也是多时序的&#xff08;多年、多月等等&#xff09;&#xff0c;让我们看看如何批量操作吧。 直接上代码&#xff1a; import numpy as np …

[附源码]Python计算机毕业设计本科生外出请假管理信息系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

数据结构和算法

1.数据结构 食谱和算法之间最大的区别就在于算法是严密的。食谱上经常会有描述得比较模糊的部分&#xff0c; 而算法的步骤都是用数学方式来描述的&#xff0c;所以十分明确。 算法和程序有些相似&#xff0c;区别在于程序是以计算机能够理解的编程语言编写而成的&#xff0c;…

构造函数详解

构造函数详解1.构造函数的概念与特性2.默认构造函数&#xff08;1&#xff09;概念&#xff08;2&#xff09;分类&#xff08;3&#xff09;工作原理3.初始化列表&#xff08;1&#xff09;定义&#xff08;2&#xff09;为什么使用初始化列表&#xff08;3&#xff09;必须使…

WebRTC系列<五>我与一位大佬的聊天记录

原本打算想用webrtc部署虚幻项目。后来在了解虚幻过程中&#xff0c;得知虚幻有像素流插件&#xff0c;导出项目里带有STUN和TURN服务&#xff0c;但是在webGL项目里比如three.js、babylon.js如果也能部署在服务器端&#xff0c;那就厉害了&#xff0c;也很有想象力空间。 基本…

表白墙网站练习【前端+后端+数据库】

表白墙网站练习【前端后端数据库】 开发该表白墙&#xff08;简单网站&#xff09;的基本步骤&#xff1a; 1.约定前后端交互接口 2.开发服务器代码 编写Servlet能够处理前端发来的请求编写数据库代码&#xff0c;来获取/存储关键数据 3.开发客户端代码 基于ajax能够构造请…

一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(上)

内容介绍了一体化低压伺服Ethercat通信的电机在汇川H5UPLC上的使用&#xff0c;本篇主要讲解环境的搭建以及使用AutoShop软件的在线调试功能&#xff0c;简单控制电机位置、速度模式运行&#xff1b; 一、系统构成 本系统主要构成是电脑&#xff0c;H5U-1614MTD-A8&#xff0c;…

家长杂志家长杂志社家长编辑部2022年第30期目录

卷首语 读懂童心,营造乐学趣学好场景 本刊编辑部; 1 本刊视线_关注《家长》投稿&#xff1a;cn7kantougao163.com 留守儿童学习动力不足的成因与激发策略 蔡斌林; 4-6 农村留守儿童加强心理健康教育的策略 张芸; 7-9 本刊视线_学校体育 中学体育线上线下教学融…

【Struts2框架】idea快速搭建struts2框架

文章目录什么是SSH框架&#xff1f;Struts2框架1、struts2的环境搭建1.1 创建web项目&#xff08;maven&#xff09;&#xff0c;导入struts2核心jar包1.2 配置web.xml&#xff08;过滤器&#xff09;&#xff0c;是struts2的入口&#xff0c;先进入1.3 创建核心配置文件struts…

STM32 Bootloader开发记录 3 固件签名校验

STM32 Bootloader开发记录 3 固件签名校验 文章目录STM32 Bootloader开发记录 3 固件签名校验1. 移植mbedtls1.1 编译mbedtls1.2 修复rsa_sign的一个bug1.3 测试RSA1.3.1 **RSA加解密&#xff1a;**1.3.2 **RSA签名验签&#xff1a;**1.3.3 **生成秘钥对**1.4 移植到STM321.4.1…

NFV中:DPDK与SR-IOV应用场景及性能对比

DPDK与SR-IOV两者目前主要用于提高IDC&#xff08;数据中心&#xff09;中的网络数据包的加速。但是在NFV&#xff08;网络功能虚拟化&#xff09;场景下DPDK与SR-IOV各自的使用场景是怎样的&#xff1f;以及各自的优缺点&#xff1f; 本文主要通过从以下几点来阐述这个问题&a…

视觉SLAM十四讲(高翔版本),ch4章节部分笔记

目标&#xff1a;理解slam的框架以及它的理论知识。供以后自己查阅。 这一章主要非常重要&#xff0c;也是理解后续优化的基础&#xff0c;它是将旋转矩阵和平移向量&#xff0c;转化为李代数的形式进行优化&#xff0c;因为它有很多好处。好处如下&#xff1a; 意思就是采用…

Linux硬盘垃圾清理心得

最近有台系统盘才10G的服务器咔咔报警&#xff0c;一共才10G的空间&#xff0c;运维还设置了80%的报警阈值&#xff0c;实在难顶。为了清理硬盘里的垃圾&#xff0c;敲了不少命令&#xff0c;怕以后忘了&#xff0c;记录一下。 首先输入df -h查看一下硬盘空间占用情况&#xf…

呼叫中心中间件(mod_cti基于FreeSWITCH)-通话记录(CDR)接口

支持把FreeSWITCH的通话记录写入mysql,sqlserver,oracle等数据库&#xff0c;也可以写入redis的list&#xff0c;或者PUBLISH到redis的channel,方便业务程序实时获取通话记录。 使用说明 如果一个通话是A呼叫B&#xff0c;那么就有2个通话记录&#xff0c;一个叫aleg,一个叫b…

Vue3 - 全局指令(详细教程)

前言 咱们在真实项目开发中&#xff0c;其实有很多指令都是通用的。我们绝对不可能去每个页面都定义一次&#xff0c;这样不仅写起来困难&#xff0c;维护起来更是困难&#xff0c;你想一下&#xff0c;假设稍微变点逻辑&#xff0c;你就需要翻阅好几个文件去改。 其实用法和局…

家用吸尘器的总体结构设计

目 录 摘 要 i Abstract ii 1 引言 1 2 家用吸尘器的历史及发展 2 2.1 家用吸尘器的历史 2 2.2 业界的发展情况 3 3 家用吸尘器的分类 5 3.1 卧式&#xff08;Canister&#xff09; 5 3.2 立式&#xff08;Upright&#xff09; 5 3.3 手持式 &#xff08;Handy&#xff09; 6 3…

ON1 NoNoise AI 2023:AI智能摄影降噪工具

ON1 NoNoise AI 2023中文版是一款强大的AI智能摄影降噪工具&#xff01;使用 AI 驱动的 NoNoise AI 快速去除噪点并获得照片中最清晰的细节。 更快地获得绝对最佳结果&#xff01; ON1 NoNoise 比其他领先的图像去噪产品快十倍&#xff0c;结果会让您大吃一惊&#xff01; 基于…