日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 架構師社區(qū)
[導讀]低調的碼農|https://sourl.cn/tzZUzN 多賬戶的統(tǒng)一登錄 名稱解釋 這里的多賬戶區(qū)別于系統(tǒng)級別的,我們講的多賬戶系統(tǒng)是指,在我們互聯網應用當中,我們的應用會使用多個第三方賬號進行登錄,比如現在常用的APP:網易、微信、QQ等等。 內容 通過這一篇文章:


面試官問我:如何設計 QQ、微信等第三方賬號登陸 ?還要我說出數據庫表設計!

低調的碼農|https://sourl.cn/tzZUzN

多賬戶的統(tǒng)一登錄

名稱解釋

這里的多賬戶區(qū)別于系統(tǒng)級別的,我們講的多賬戶系統(tǒng)是指,在我們互聯網應用當中,我們的應用會使用多個第三方賬號進行登錄,比如現在常用的APP:網易、微信、QQ等等。

內容

通過這一篇文章:

  1. 可以學到:多用戶下面的技術方案細節(jié),以及相應的表設計,流程設計。
  2. 不可以學到:與其他文章一樣,我這里不會有具體代碼實現細節(jié),方案做的對,代碼咋寫都不會太爛。
面試官問我:如何設計 QQ、微信等第三方賬號登陸 ?還要我說出數據庫表設計!

架構演進

創(chuàng)業(yè)初期

歸結為創(chuàng)業(yè)初期是因為這個時候用戶量比較少,甚至還沒有接入上面所說的其他第三方的賬戶系統(tǒng),只是自建的體系就可以滿足,自建體系的話,目前常用的有

用戶名密碼注冊登陸

這種方式在很多初期網站建設會使用,先注冊,再進行登錄,在老一點的cms中都能找到這個影子。

流程圖:

面試官問我:如何設計 QQ、微信等第三方賬號登陸 ?還要我說出數據庫表設計!

流程說明:

  1. 前端將用戶名、密碼發(fā)送到服務器,服務器進行常規(guī)的判斷,判斷用戶名、密碼長度是否滿足,用戶名是否重復等條件,條件不通過直接返回對應錯誤碼給到前端,這里密碼字段,為了防止傳輸過程中被截胡,建議加密再上傳,我們的傳輸密碼默認都是會進行一個md5加密,然后記錄到數據庫再進行一層加密,就算是脫庫也沒事,密碼不要明文存儲。
  2. 校驗通過后,就將用戶名密碼寫入數據庫,并進行后面積分發(fā)放等操作,這里不展開。
  3. 現在進行登錄,前端將用戶名,密碼發(fā)送給到服務端,服務端首先會校驗登錄次數是否超過設置的閾值,如果超過只能繼續(xù)等待被關小黑屋。
  4. 如果未超過繼續(xù)登錄邏輯,判斷用戶名、密碼是否正確,不正確密碼則進行閾值的判斷,如果超過則關小黑屋,記住小黑屋必須設置過期時間,要不然就會永久關上了,這個可以用redis的過期來做。
  5. 登錄成功后進行后續(xù)的一切后置邏輯,比如加積分。。。等操作。

手機號注冊登陸

流程圖:

面試官問我:如何設計 QQ、微信等第三方賬號登陸 ?還要我說出數據庫表設計!

流程說明:

  1. 首先輸入手機號,然后發(fā)送到服務端,服務端將手機號記錄在我們數據庫中,然后生成隨機驗證碼,并將手機號和驗證碼綁定到一個redis里面,然后記錄過期時間,這個過期時間一般是10分鐘左右,這就是我們一般手機驗證碼的有效期。
  2. 手機接收到手機短信后,那么就在界面填寫驗證碼發(fā)送服務端,服務端收到驗證碼后就會在redis里面查詢到這個手機號對應的驗證碼,失敗就返回錯誤碼。
  3. 成功后就進行登錄操作。

這里看起來沒有明確的注冊登錄操作,其實在發(fā)送手機號碼就可以認為是一個常規(guī)的注冊,然后后面的驗證碼輸入就是一個登陸操作,

問: 那我要密碼咋辦?

答: 在后續(xù)產品里面增加一個 手機號碼密碼補錄的功能 即可,這也是現在很常規(guī)的手法,但是現在移動互聯網大爆炸時代,密碼已經顯得不是那么重要了,反正我從來記不住密碼,如果手機號碼能操作的app,絕對不用密碼來操作。

數據庫設計

表結構

自增id 用戶名 密碼 手機號 錯誤次數
1 user1 7fef6171469e80d32c0559f88b377245 13456789012 0
2 user2 7fef6171469e80d32c0559f88b377245 13456789013 0

說明

這里只是單純說明需要用到的數據,沒有擴展具體場景,這個表結構能夠滿足上面兩個方案的設計。

引入第三方賬戶方案

這里是以QQ-SDK的登錄邏輯, 我們先來一波時序圖

面試官問我:如何設計 QQ、微信等第三方賬號登陸 ?還要我說出數據庫表設計!

說明:

  1. 客戶端自己調起登錄的界面,進行輸入用戶名、密碼,這里的是第三方的用戶名,密碼,登錄成功后,會返回access_token openid expire_in,這過程會使用到oauth2.0,不過在sdk里面進行內置回調獲取了,后面我們會說明我們自身實現的oauth2.0
  2. 客戶端拿到access_token、openid、login_type(qq、wechat...)請求應用服務器,應用服務器拿到這些數據后就會根據對應的login_type去對應的用戶中心進行access_token和openid進行校驗。校驗不通過則返回對應錯誤碼
  3. 校驗通過后就會判斷本地是否有這個login_type和openid是否存在,不存在則進行獲取遠程的用戶名、頭像等基礎信息來作為本地基礎數據,并且返回code值
  4. 如果已經存在,那就是進行登錄操作,返回code值。
  5. 客戶端拿到code值后進行token值的換取,這個完全遵照oauth2.0的協(xié)議來走的,后續(xù)每次請求必須帶上token,token值在服務端的時間比較久,因為我們想要做的是那種永不下線的操作,所以每次請求我們都將token過期時間進行累加。

數據庫設計

根據部分小伙伴的的建議,我這里做一下數據庫的整理:

用戶基礎表(users)

字段 備注
user_id 用戶id
token 用戶登陸的token
expire_in token過期時間
try_times 登錄失敗次數

用戶驗證關聯表(user_auth_rel)

字段 備注
id 自增id
user_id 用戶id
auth_id 驗證表id
auth_type 驗證類型(local、third)

本地用戶表(user_local_auth)

字段 備注
auth_id 認證id,自增id
user_name 用戶唯一標識
password 用戶密碼
mobile 用戶手機

第三方用戶表(user_third_auth)

字段 備注
auth_id 用戶id
openid 第三方用戶唯一標識
login_type 第三方平臺標識(qq、wechat...)
access_token 第三方獲取的access_token,校驗使用

說明

  1. users表只是單純針對我們業(yè)務側的登錄,主要是做自身業(yè)務的oauth2.0業(yè)務,
  2. user_local_auth是做自己用戶名、密碼登錄,手機號碼登錄信息記錄,
  3. user_third_auth是我們第三方用戶體系的數據記錄,
  4. user_auth_rel是用來關聯我們users表與user_local_auth、user_third_auth。
  5. 整個設計理念就是將自建用戶與第三方在存儲上區(qū)分,這在架構演進上也是合乎情理的,開始用戶體系大多自建,而后才是對外接入。

總結

  1. 總的來講,第三方用戶的接入技術上來講是比較簡單的,這里設計多一個user_thirds是可以支持足夠多的第三方接入,當然一般我們也就兩三個登錄就好,太多登錄方不僅自身維護成本,界面擺盤也不好看不是。
  2. 希望大家能夠通過以上學習,能夠對于我們多賬戶登錄有一個比較好的認知,這里設計方案不包含分表分庫、沒有服務化,就是簡單直接的設計,當然用戶量和需要的不一樣,在這個基礎上還要加很多東西,謝謝大家閱讀!!!

特別推薦一個分享架構+算法的優(yōu)質內容,還沒關注的小伙伴,可以長按關注一下:

面試官問我:如何設計 QQ、微信等第三方賬號登陸 ?還要我說出數據庫表設計!

長按訂閱更多精彩▼

面試官問我:如何設計 QQ、微信等第三方賬號登陸 ?還要我說出數據庫表設計!

如有收獲,點個在看,誠摯感謝

免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉