1.前言
本項目中秀存,用戶新增是通過用戶自己注冊得來的,因此本章節(jié)將注冊/登錄
放到用戶模塊來講。
本模塊功能包括:
- 注冊/登錄
- 收貨地址
2. 功能分析
拿到需求杨蛋,首先是看產(chǎn)品原型兜材,了解清楚需求理澎,想好了,再去做表設計曙寡,最后才動手寫代碼糠爬。
2.1 注冊/登錄
2.1.1 需求分析
根據(jù)課程中的介紹及效果頁面,我們可以了解到举庶,該功能的需求歸納為以下幾點:
- 用戶注冊需提供:用戶名执隧、郵箱、密碼户侥、確認密碼镀琉;
- 注冊時,需驗證郵箱蕊唐;
- 注冊完成后屋摔,郵箱和密碼將作為登錄的賬號和密碼使用;
附功能效果圖如下:
2.1.2 表設計
在表設計之前要先想好功能的實現(xiàn)邏輯替梨。
- 實現(xiàn)邏輯
課程中采用的是laravel
自帶的用戶認證功能實現(xiàn)注冊登錄驗證和自帶的verified
中間件 實現(xiàn)郵件驗證的功能钓试。其中,驗證郵箱的實現(xiàn)邏輯是副瀑,用一個字段保存用戶是否已經(jīng)通過驗證弓熏,通過中間件攔截請求跳轉(zhuǎn)到驗證頁面。 - 表設計
我們在思考程序該實現(xiàn)時糠睡,通常把表結(jié)構(gòu)也想了個大概挽鞠,用哪些字段,這些字段有什么用處铜幽,把這些搞清楚之后滞谢,表設計就很簡單了。
在用戶表中除抛,需要保存郵箱狮杨、密碼用作登錄校驗;需要一個字段標識該用戶郵箱是否通過驗證到忽;郵箱作為用戶驗證的唯一標識橄教,設置為唯一鍵。
另外喘漏,還有其他一些看起來不重要但實際很需要的字段护蝶,例如注冊時間,我們在做表設計時盡量要考慮長遠一點翩迈,有一些字段我們在前期需求中沒有用到持灰,但很可能以后運營會需要用到,比如用戶的注冊時間负饲,等項目運營起來有一定用戶量以后堤魁,需要做運營分析喂链,想要知道一段時間內(nèi)用戶的增長情況,在這種情況下妥泉,你可以懟PM沒有事先說明椭微,但鍋還是你背。
具體的表結(jié)構(gòu)如下:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增id
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 用戶名
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 郵件
`email_verified_at` timestamp NULL DEFAULT NULL, # 郵件驗證時間
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 密碼盲链,用于用戶身份驗證
`remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, # 登錄成功后系統(tǒng)分配給用戶的token蝇率,用于免密登錄(記住密碼)
`created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時間,用戶的注冊時間
`updated_at` timestamp NULL DEFAULT NULL, # 更新時間
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2.1.3 代碼借鑒
注冊登錄用的laravel自帶的auth刽沾,操作簡單本慕,可以了解一下其內(nèi)部實現(xiàn)方式laravel Auth原理淺析。
2.2 收貨地址
2.2.1 需求分析
收貨地址是屬于用戶的一種屬性悠轩,在購買商品選擇收貨地址時會用到间狂。具體需求歸納如下:
- 為了保證商品的順利送達,收件人的信息應盡可能詳盡火架,包括收件人姓名鉴象、聯(lián)系方式和詳細地址;
- 考慮到用戶習慣何鸡,常用的收件地址變動少纺弊,將收獲地址按上次使用時間排序(X寶是設置了默認收獲地址);
2.2.2 表設計
- 實現(xiàn)邏輯
收獲地址的功能很簡單骡男,就是增刪改查淆游。顯示的時候按照最近使用時間排個序就好了。 - 表設計
根據(jù)前面的需求分析隔盛,可知犹菱,用戶收獲地址這張表也很簡單,只需要保存收件人信息吮炕,關聯(lián)用戶id就好了腊脱。在表設計方面,收獲地址中的省-市-區(qū)龙亲,方便配合前端做三級聯(lián)動陕凹,當然你也可以合并成一個字段保存,省市區(qū)中間用一個字符隔開鳄炉,用的時候再分割杜耙;用了一個last_used_at
字段保存該地址的最近使用時間;另外拂盯,用戶ID這里是做了聯(lián)級刪除的外鍵關聯(lián)的佑女。
具體表結(jié)構(gòu)如下:
CREATE TABLE `user_addresses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
`user_id` int(10) unsigned NOT NULL, # 所屬用戶id
`province` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收貨地址-省
`city` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收貨地址-市
`district` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收貨地址-區(qū)
`address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收獲地址-具體地址
`zip` int(10) unsigned NOT NULL, # 郵編
`contact_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 聯(lián)系人姓名
`contact_phone` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 聯(lián)系人電話
`last_used_at` datetime DEFAULT NULL, # 最后一次使用時間
`created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時間
`updated_at` timestamp NULL DEFAULT NULL, # 更新時間
PRIMARY KEY (`id`),
KEY `user_addresses_user_id_foreign` (`user_id`),
CONSTRAINT `user_addresses_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2.2.3 代碼借鑒
這一節(jié)的需求和實現(xiàn)都比較簡單,但是有一些比較好的編碼習慣可以學習,例如:
- 用授權(quán)策略來做權(quán)限控制团驱;
- 新建專門的 Request 類做校驗簸呈;