解密陌生人(7)註冊,解密陌生人註冊
提示: 因為工程稍微有點大對我個人來說,所以可能在某些方面講的不清楚或邏輯性不夠強,如果有問題請及時@我。
原工程:https://github.com/LineChen/
一、註冊
註冊就是儲存使用者的個人資訊,包括使用者註冊郵箱,系統分配的Id(最開始沒想到分配Id來標識一個使用者,而是準備用郵箱,但是在儲存使用者離線訊息時需要結合使用者唯一標識來建立表,由於郵箱帶有特殊字元@,所以不能作為表名,只有為每個註冊的使用者指派一個Id,之後所有通訊操作均用Id標識)、使用者名稱、生日、性別、密碼、頭像
注意點:
1.頭像的儲存:這裡並不是把頭像用BLob型資料存到資料庫,而是藉助檔案系統儲存帳戶圖片,包括之後的離線語音和離線圖片,在資料庫只用儲存路徑,這樣操作簡單,速度更快。其他所有和圖片或語音相關的處理和這一樣。
2.密碼的儲存:對於密碼的各種操作,一定要盡量保證最大的安全度。在用戶端和伺服器傳遞之間,用的PBE對稱式加密,如果沒有人專門花時間去抓包解密,而且就算這樣也不一定能解密出來。然後,對於密碼,比如註冊時,或者登入時都要用到密碼,發送到伺服器的密碼用的是MD5轉換,也就是說,在資料庫儲存密碼不會是明文儲存,用明文儲存密碼是一件非常危險的做法。如果有人盜取了你的資料庫,就同時得到使用者的所有資訊,包括密碼。還記得前幾年的“密碼事件”,CSDN使用者資料庫泄露、天涯社區資料庫泄露、索尼資料庫泄露等等,涉及使用者都是幾千萬,悲劇的是天涯社區儲存使用者的資訊全部是明文,包括密碼 ……
/**
* 處理註冊
*
* @param session
* 會話
* @param moMsg
* 訊息包
*/
public void handleRegister(IoSession session, iMoMoMsg moMoMsg) {
JSONObject json = JSON.parseObject(moMoMsg.msgJson);
SqlModel model = new SqlModel();
String userEmail = json.getString(MsgKeys.userEmail);
String userId = model.allocateId();// 分配Id
String userHeadPath = StaticValues.HEAD_P_PATH + userId + “.png”;
FileTools.getInstance().saveMultyFile(userHeadPath, moMoMsg.msgBytes);
String sql = “insert into imomo_clients values (?,?,?,?,?,?,?,?,?)”;
String[] paras = { userId, userEmail, json.getString(MsgKeys.userName),
json.getString(MsgKeys.userPasswd), userHeadPath,
json.getString(MsgKeys.userSex),
json.getString(MsgKeys.userBirthday), “” , 0+”“};
iMoMoMsg Notify = new iMoMoMsg();
Notify.symbol = ‘+’;
JSONObject NotifyJson = new JSONObject();
if (model.updateDb(sql, paras)) {
NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.REGISTER_SUCCESS);
System.out.println(“註冊成功”);
} else {
NotifyJson.put(MsgKeys.msgType, iMoMoMsgTypes.REGISTER_FAILED);// 註冊失敗
}
Notify.msgJson = NotifyJson.toJSONString();
session.write(Notify);
}
從上可以看到,註冊分為分配使用者Id,然後儲存個人資訊。儲存成功便是註冊成功,發送註冊成功的通知給使用者。