1. 程式人生 > >使用者註冊後是如何進行啟用的,為什麼需要啟用

使用者註冊後是如何進行啟用的,為什麼需要啟用

問題:

平常我們註冊後,往往需要提示我們需要開啟郵箱啟用賬號,那麼啟用賬號是怎麼進行操作的呢?啟用有什麼意義?為什麼需要啟用呢?

分析:

1.對使用者客戶端而言,啟用是操作了資料庫的某一狀態,使賬號處於開放狀態,獲得使用權。 也是對身份一種核查,綁定了你的郵箱,方便通知你,或者密碼找回等操作。
2.對伺服器而言,防止了機器註冊(大量生產無意義的註冊),根據你的CPU和MAC地址生成一個啟用碼,確保了唯一性和真實性,從而減輕了伺服器的壓力。
對於遊戲或者軟體,可以用於購買使用權(啟用碼)來盈利,限制使用人數,保障伺服器執行等。

在java中,郵箱啟用的其中一種用法事例:

(就是提交使用者註冊資料後,業務邏輯層會生成啟用碼,和預設的未啟用狀態,然後傳送一個連結到客戶的郵箱,使用者點選後,攜帶啟用碼到web層-service層-dao層,最後改變了啟用預設狀態N為Y)

在業務邏輯層,除了使用者提交的資料,往往還需要補全一些資訊,確保資料的完整性,如下的啟用狀態,啟用碼,對使用者密碼進行加密防止管理員洩密等。
在這裡插入圖片描述
在上面前端提交的資料和下面資料庫的對比,提交資料不全面
(資料庫的表名字為tab_user)
在這裡插入圖片描述
所以需要在業務邏輯層(service層)補充資料,確保資料完整性。
(UuidUtil工具類在最後,生成啟用碼的演算法程式碼)
在這裡插入圖片描述
然後在dao層寫上相對應的語句,新增使用者
在這裡插入圖片描述


資料庫新增成功後如下(資料資訊沒有寫嚴格的程式碼限制內容,如手機號是英文):
在這裡插入圖片描述

完善完資料後,需要使用者登入郵箱去進行啟用 在業務邏輯層會發送一條Email(向用戶傳送一個連結,連結帶有使用者啟用碼到指定的郵箱),當用戶登入郵箱,點選使用者啟用,會對郵箱進行啟用
格式:http://www.xx.com(處理請求的域名)/xxxServle?action=active&code=active&code=啟用碼
(service層,MailUtil工具類在下文中)
在這裡插入圖片描述
使用者登入郵箱後開啟郵箱點解這裡的使用者啟用,就會發送請求並攜帶code啟用碼到userServlet
在這裡插入圖片描述


Servlet層
在這裡插入圖片描述
在這裡插入圖片描述

業務層:
在這裡插入圖片描述

dao層(資料庫表名字為tab_user)
在這裡插入圖片描述
資料庫中啟用狀態由N變為Y,然後只需要使用者登入時,提交請求的時候判斷status是否為Y,就可以決定使用者是否有使用權了
在這裡插入圖片描述

MailUtil工具類

public class MailUtil {
    /**
     * 傳送郵件
     * 引數一:傳送郵件給誰
     * 引數二:傳送郵件的內容
     */
    public static void sendMail(String toEmail, String emailMsg) throws Exception {
        //1_建立Java程式與163郵件伺服器的連線物件
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.163.com");//這裡配置傳送郵件伺服器地址,由於發件人的郵箱是163賬號,所以這裡配置163發件伺服器(如果 是QQ可以百度搜索找到相對應的發件伺服器)
        props.put("mail.smtp.auth", "true");
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
            //第一個"xxx"為登入賬號,第二個"xxx"為登入授權碼(如下圖)
                return new PasswordAuthentication("[email protected]", "xxx");
            }
        };
        //Java物件和163的一個會話物件
        Session session = Session.getInstance(props, auth);
        //2_建立一封郵件
        Message message = new MimeMessage(session);
        //設定發件人郵箱
        message.setFrom(new InternetAddress("[email protected]"));
        //設定收件人
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(toEmail));
        //設定郵件主題
        message.setSubject("使用者啟用");
        //郵件內容
        message.setContent(emailMsg, "text/html;charset=UTF-8");
        //3_傳送郵件
        Transport.send(message);
    }

獲取設定授權碼:
在這裡插入圖片描述
在這裡插入圖片描述

UuidUtil工具類

/**
 * 產生UUID隨機字串工具類
 */
public final class UuidUtil {
	private UuidUtil(){}
	public static String getUuid(){
		return UUID.randomUUID().toString().replace("-","");
	}
}

在資料庫使用select UUID(),發現每次生成的uuid都不一樣,而且有-分割開來,所以 上面的return
UUID.randomUUID().toString().replace("-","");語句能使我們獲得一串36位數字的字串啟用碼
在這裡插入圖片描述在這裡插入圖片描述