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

前言

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

  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;
    }

总结流程

开发注册功能:完成这个功能,客户端需要发送三次请求。

第一次请求:访问注册页面

第二次请求:客户端填写相应的信息与数据,将其发送给服务端。

第三次请求:点击邮件中的链接,访问服务端的

@GetMapping("/register")
public String getRegisterPath() {
    return "/site/register";
}

激活服务。

接下来我们针对这三次请求编写代码。:关键在于thymeleaf一段标签的复用。

首先我们在首页,然后点击注册按钮跳转至注册页面,需要的工作在Controller中添加一个方法给前端返回注册页面的路径,让前端跳转。至此完成第一个请求。

 

填写完表单之后,点击立即注册,就会访问后端的Controller的一个方法。完成以下几个功能

1、校验数据是否正确

2、将数据插入到数据库中

3、发送激活邮件。

4、返回数据给前端,然后由前端进行页面跳转到操作页面

发送的激活邮件如下:

最后点击此链接进行账号激活。至此注册页面完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜转转m

一毛钱助力博主实现愿望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值