1. 程式人生 > 其它 >手寫郵箱獲取驗證碼註冊登入功能!!!

手寫郵箱獲取驗證碼註冊登入功能!!!

技術標籤:SpringBootspring boot中介軟體smtp

找回密碼的困擾
自己做了一個部落格網站,有登入註冊功能,但是沒有找回密碼功能,思考了許久,發現可以通過第三方來實現,第一想到的就是通過簡訊驗證碼,但是資金問題,一條0.1元,屬是有點貴(多了就貴了),然後想到了用微信掃碼,但是微信也收費,無奈之下用郵箱吧,感覺郵箱還不錯,只需要開啟STMP協議就行了,開啟之後,會有一個密碼,那個密碼儲存好,後面會用到。
在這裡插入圖片描述
開始建立
首先建立一個springboot專案,然後引入mail依賴,簡單配置即可。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置yaml,密碼為自己生成的
在這裡插入圖片描述

準備工作做好之後,下面來寫一下獲取驗證碼的方法,把獲取到的驗證碼存到session中方便後續判斷。

public String getCode(String email, HttpSession session) {
        int code = (int) (Math.random() * 1000000);
        String codeString = String.valueOf(code);
        if (codeString.length() != 6) {
            code = code + 100000;
        }

        SimpleMailMessage message = new SimpleMailMessage();
        // 設定郵箱標題
        message.setSubject("驗證碼");
        // 設定郵箱內容
        message.setText("您好!\n驗證碼為:"+ code);
        // 傳送者郵箱
        message.setFrom(username);
        message.setTo(email);
        mailSender.send(message);
        session.setAttribute("email", email);
        session.setAttribute("code", code + "");
        return "success";
    }

獲取到驗證碼之後,可以進行註冊了

    public BaseResult register(String email, String password, String code, HttpSession session) {
        User user = new User();
        String myEmail = (String) session.getAttribute("email");
        String myCode = (String) session.getAttribute("code");
        if (!email.equals(myEmail) || !code.equals(myCode)) {
            return BaseResult.error();
        }

        user.setUsername(UUID.randomUUID().toString());
        user.setEmail(email);
        user.setPassword(password);
        user.setSalt("abc");
        user.setHeadUrl("url");
        userMapper.addUser(user);
        return BaseResult.ok();
    }

註冊完之後,就可以進行登入了。

    public BaseResult Login(String email, String password) {
        User user = userMapper.selectUserByEmail(email);
        if (user.getPassword().equals(password)) {
            return BaseResult.ok();
        }
        return BaseResult.error();
    }