<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    如何設(shè)計(jì) QQ、微信等第三方賬號登陸 ?

    共 3043字,需瀏覽 7分鐘

     ·

    2021-07-27 00:59

    來源:http://suo.im/5SBVka


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

    名稱解釋

    這里的多賬戶區(qū)別于系統(tǒng)級別的,我們講的多賬戶系統(tǒng)是指,在我們互聯(lián)網(wǎng)應(yīng)用當(dāng)中,我們的應(yīng)用會(huì)使用多個(gè)第三方賬號進(jìn)行登錄,比如現(xiàn)在常用的APP:網(wǎng)易、微信、QQ等等。

    內(nèi)容

    通過這一篇文章:

    1. 可以學(xué)到:多用戶下面的技術(shù)方案細(xì)節(jié),以及相應(yīng)的表設(shè)計(jì),流程設(shè)計(jì)。
    2. 不可以學(xué)到:與其他文章一樣,我這里不會(huì)有具體代碼實(shí)現(xiàn)細(xì)節(jié),方案做的對,代碼咋寫都不會(huì)太爛。

    架構(gòu)演進(jìn)

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

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

    用戶名密碼注冊登陸

    這種方式在很多初期網(wǎng)站建設(shè)會(huì)使用,先注冊,再進(jìn)行登錄,在老一點(diǎn)的cms中都能找到這個(gè)影子。

    流程圖:

    流程說明:

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

    手機(jī)號注冊登陸

    流程圖:

    流程說明:

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

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

    問: 那我要密碼咋辦?

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

    數(shù)據(jù)庫設(shè)計(jì)

    表結(jié)構(gòu) :

    自增id用戶名密碼手機(jī)號錯(cuò)誤次數(shù)
    1user17fef6171469e80d32c0559f88b377245134567890120
    2user27fef6171469e80d32c0559f88b377245134567890130

    說明 :

    這里只是單純說明需要用到的數(shù)據(jù),沒有擴(kuò)展具體場景,這個(gè)表結(jié)構(gòu)能夠滿足上面兩個(gè)方案的設(shè)計(jì)。

    引入第三方賬戶方案

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

    說明:

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

    數(shù)據(jù)庫設(shè)計(jì)

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

    用戶基礎(chǔ)表(users)

    字段備注
    user_id用戶id
    token用戶登陸的token
    expire_intoken過期時(shí)間
    try_times登錄失敗次數(shù)

    用戶驗(yàn)證關(guān)聯(lián)表(user_auth_rel)

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

    本地用戶表(user_local_auth)

    字段備注
    auth_id認(rèn)證id,自增id
    user_name用戶唯一標(biāo)識
    password用戶密碼
    mobile用戶手機(jī)

    第三方用戶表(user_third_auth)

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

    說明

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

    總結(jié)

    1. 總的來講,第三方用戶的接入技術(shù)上來講是比較簡單的,這里設(shè)計(jì)多一個(gè)user_thirds是可以支持足夠多的第三方接入,當(dāng)然一般我們也就兩三個(gè)登錄就好,太多登錄方不僅自身維護(hù)成本,界面擺盤也不好看不是。
    2. 希望大家能夠通過以上學(xué)習(xí),能夠?qū)τ谖覀兌噘~戶登錄有一個(gè)比較好的認(rèn)知,這里設(shè)計(jì)方案不包含分表分庫、沒有服務(wù)化,就是簡單直接的設(shè)計(jì),當(dāng)然用戶量和需要的不一樣,在這個(gè)基礎(chǔ)上還要加很多東西,謝謝大家閱讀!

    感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。
    —————END—————

    推薦閱讀:

    推薦一款神器,助你秒級定位線上問題!
    代碼中大量的if/else,你有什么優(yōu)化方案?
    你還在用Jenkins?趕快看看這些替代方案吧!
    程序員常用的 15 款Java開發(fā)者工具

    最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
    獲取方式:關(guān)注公眾號并回復(fù) java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
    明天見(??ω??)??
    瀏覽 43
    點(diǎn)贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評論
    圖片
    表情
    推薦
    點(diǎn)贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    成人无码人妻 | 黑人大屌在线 | 日本zaixian三区 | 中午字幕在线观看 | 大鸡巴日逼 |