<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          多賬號統(tǒng)一登錄(實(shí)現(xiàn)方案)

          共 4491字,需瀏覽 9分鐘

           ·

          2022-04-24 13:11

          現(xiàn)在幾乎大部分的 App 都支持使用多個第三方賬號進(jìn)行登錄,如:微信、QQ、微博等,我們把此稱為多賬號統(tǒng)一登陸。而這些賬號的表設(shè)計,流程設(shè)計至關(guān)重要,不然后續(xù)擴(kuò)展性賊差。

          本文不提供任何代碼實(shí)操,但是梳理一下博主根據(jù)我司賬號模塊的設(shè)計,提供思路,僅供參考。

          一、 自建的登陸體系

          1.1.1 手機(jī)號登陸注冊

          該設(shè)計的思路是每個手機(jī)號對應(yīng)一個用戶,手機(jī)號為必填項。

          流程:

          1. 首先輸入手機(jī)號,然后發(fā)送到服務(wù)端。先判斷該手機(jī)號是否存在賬號,如果沒有,就會生成隨機(jī)驗(yàn)證碼,將手機(jī)號和驗(yàn)證碼綁定到 Redis中,并設(shè)置一定的過期時間(過期時間一般是5分鐘,這就是我們一般手機(jī)驗(yàn)證碼的有效期),最后將驗(yàn)證碼通過短信發(fā)送給用戶。
          2. 用戶接收到驗(yàn)證碼后,在界面填寫驗(yàn)證碼以及密碼等基礎(chǔ)信息,然后將這些數(shù)據(jù)發(fā)送服務(wù)端。服務(wù)端收到后,先判斷在 Redis里面這個手機(jī)號對應(yīng)的驗(yàn)證碼是否一致,,失敗就返回錯誤碼,成功就給用戶創(chuàng)建一個賬號和保存密碼。
          3. 注冊成功后,用戶即可通過自己的 手機(jī)號+密碼進(jìn)行登陸。

          問題:

          1. 用戶體驗(yàn)差,需要完成獲取驗(yàn)證碼,填寫驗(yàn)證碼/密碼/用戶名等諸多的信息完成注冊,然后才能使用;
          2. 容易遺忘密碼,遺忘后,只能通過忘記密碼來重新設(shè)置密碼。

          1.1.2 優(yōu)化注冊登陸

          該方案的思路是弱化密碼的必填性,即無論用戶是否注冊過,可通過 手機(jī)號+驗(yàn)證碼 直接進(jìn)行登陸(保留 手機(jī)號+密碼登錄的方式)。

          流程:

          1. 輸入手機(jī)號,然后發(fā)送到服務(wù)端。服務(wù)端生成隨機(jī)驗(yàn)證碼,將手機(jī)號和驗(yàn)證碼綁定到 Redis中,并設(shè)置一定的過期時間(過期時間一般是5分鐘,這就是我們一般手機(jī)驗(yàn)證碼的有效期),最后將驗(yàn)證碼通過短信發(fā)送給用戶。
          2. 用戶接收到驗(yàn)證碼后,在界面只需填寫收到的驗(yàn)證碼,提交到服務(wù)端。服務(wù)端收到后,先判斷在 Redis里面這個手機(jī)號對應(yīng)的驗(yàn)證碼是否一致,失敗就返回錯誤碼,成功就直接登錄。如果是老用戶,直接拉取用戶信息;如果是新用戶,則提示他可以完善用戶信息(不強(qiáng)制)。
          3. 用戶通過 手機(jī)號+驗(yàn)證碼登錄后,也可選擇設(shè)置密碼,然后就可以通過 手機(jī)號+密碼的方式登錄,即:密碼是非必填項。

          用戶表設(shè)計:

          iduser_nameuser_passworduser_mobilestatemore
          用戶id用戶名用戶密碼手機(jī)號碼賬號狀態(tài)其他信息

          1.2 引入第三方賬戶方案

          1.2.1 微博登錄

          進(jìn)入 Web2.0 時代 ,微博開放了第三方網(wǎng)站登錄, 產(chǎn)品說, 這個我們得要, 加個用微博帳號就能登錄我們的 App吧,而且得和我們自己的用戶表關(guān)聯(lián)。

          流程:

          1. 客戶端調(diào)用微博登錄的界面,進(jìn)行輸入用戶名、密碼,登錄成功后,會返回 access_token,通過 access_token調(diào)取 API接口獲取用戶信息。
          2. 服務(wù)端通過用戶信息在我們用戶表創(chuàng)建一個賬號,以后,該第三方賬號即可通過該微博賬號直接進(jìn)行登陸。

          微博用戶信息表設(shè)計:

          iduser_iduidaccess_token
          主鍵id用戶id微博唯一id授權(quán)碼

          1.2.2 噩夢來臨

          緊接著, QQ又開放用戶登錄了, 微信開放用戶登錄了,網(wǎng)易開發(fā)用戶登錄了。。。。。。一下子要接入好多家第三方登錄了, 只能按照 “微博用戶信息表” 新建一個表,重寫一套各個第三方登錄。

          二、 優(yōu)化賬號體系

          2.1 原賬號體系分析

          1. 自建登陸體系:無論 手機(jī)號+密碼 , 還是 手機(jī)號+驗(yàn)證碼 , 都是一種 用戶信息+密碼 的驗(yàn)證形式;
          2. 第三方登錄:也是 用戶信息+密碼 的形式, 用戶信息即第三方系統(tǒng)中的 ID(第三方系統(tǒng)中的唯一標(biāo)識), 密碼即 access_token, 只不過是一種有使用時效定期修改的密碼。

          2.2 新的賬號體系

          2.2.1 數(shù)據(jù)表設(shè)計

          用戶基礎(chǔ)信息表:

          idnicknameavatarmore
          用戶id昵稱頭像其他信息

          用戶授權(quán)信息表:

          iduser_ididentity_typeidentifiercredential
          主鍵id用戶id登錄類型(手機(jī)號/郵箱) 或第三方應(yīng)用名稱 (微信/微博等)手機(jī)號/郵箱/第三方的唯一標(biāo)識密碼憑證 (自建賬號的保存密碼, 第三方的保存 token)

          說明:

          1. 用戶表分為 用戶基礎(chǔ)信息表 + 用戶授權(quán)信息表
          2. 用戶信息表不保存任何密碼, 不保存任何登錄信息(如用戶名, 手機(jī)號, 郵箱), 只留有昵稱、頭像等基礎(chǔ)信息; 所有和授權(quán)相關(guān),都放在用戶信息授權(quán)表, 用戶信息表和用戶授權(quán)表是一對多的關(guān)系 。

          2.2.2 登錄流程

          • 手機(jī)號+驗(yàn)證碼

          沿用之前的方案。

          • 郵箱/手機(jī)號+密碼:

          用戶填寫 郵箱/手機(jī)號+密碼; 請求登錄的時候, 先判斷類型, 如手機(jī)號登錄為例:

          使用 type='phone' 結(jié)合 identifier='手機(jī)號' 查找, 如有, 取出并判斷 password_hash(密碼)是否和該條目的 credential 相符, 相符則通過驗(yàn)證, 隨后通過 user_id 獲取用戶信息;

          • 第三方登錄, 如微信登錄:

          查詢 type='weixin' 結(jié)合 identifier='微信 openId', 如果有記錄, 則直接登錄成功, 并更新 token; 假設(shè)與微信服務(wù)器通信不被劫持的情況下無需判斷憑證問題。

          2.2.3 優(yōu)缺點(diǎn)

          優(yōu)點(diǎn):

          1. 登錄類型無限擴(kuò)展, 新增登錄類型的開發(fā)成本顯著降低;
          2. 原來條件下, 應(yīng)用需要驗(yàn)證手機(jī)號是否已驗(yàn)證和郵箱是否已驗(yàn)證, 需要相對應(yīng)多一個字段如 phone_verified 和 email_verified, 如今只要在 用戶授權(quán)信息表 表中增加一個統(tǒng)一的 verified字段, 每種登錄方式都可以直觀看到是否已驗(yàn)證情況;
          3. 在 用戶授權(quán)信息表 添加相應(yīng)的時間和 IP 地址, 就可以更加完整地跟蹤用戶的使用習(xí)慣, 比如:已經(jīng)不使用微博登錄兩年多, 已經(jīng)綁定微信 300天;
          4. 如果你說郵箱和手機(jī)號就是用戶信息的組成部分, users 表盡管拓展, users 表里依然有email , phone , 但他們僅僅作為“展示用途”,和昵稱,頭像或者性別這些屬性沒有本質(zhì)區(qū)別;
          5. 可按需綁定任意數(shù)量的同類型登錄方式, 即一個用戶可以綁定多個微信, 可以有多個郵箱, 可以有多個手機(jī)號。當(dāng)然你也可以限制一種登錄方式只有一條記錄;

          缺點(diǎn) :

          1. 用戶同時存在郵箱、用戶名、手機(jī)號等多種站內(nèi)登錄方式時, 改密碼時必須一起改, 否則就變成了 郵箱+新密碼手機(jī)號+舊密碼都可以登錄, 肯定是很詭異的情況;

          2. 代碼量增加了, 有些情況下邏輯判斷增加了, 難度增大了; 舉個例子, 無論用戶是否已登錄, 無論用戶是否已注冊過, 都是點(diǎn)擊同一鏈接前往微博第三方授權(quán)后返回, 可能出現(xiàn)幾種情況:



            1. 該微博在本站未注冊過, 很好, 直接給他注冊關(guān)聯(lián)并登錄;
          3. 該微博已經(jīng)在本站存在, 當(dāng)前用戶未登錄, 直接登錄成功;

          4. 該微博未在本站注冊, 但當(dāng)前用戶已經(jīng)登錄并關(guān)聯(lián)的是另一個微博帳號, 作何處理取決于是否允許綁定多個微博帳號;

          5. 該微博未在本站注冊過, 當(dāng)前用戶已登錄, 嘗試進(jìn)行綁定操作;

          6. 該微博已經(jīng)注冊, 用戶又已使用該帳號登錄, 為何他重復(fù)綁定自己;

          7. 該微博已經(jīng)在本站存在, 但當(dāng)前用戶已經(jīng)登錄并關(guān)聯(lián)的是另一個微博帳號, 作何處理?

          三、 一鍵登陸

          3.1 背景

          回顧一下 手機(jī)號+驗(yàn)證碼 的登錄方式:

          1. 輸入手機(jī)號、等待驗(yàn)證碼短信、輸入驗(yàn)證碼、點(diǎn)擊登錄。整個流程走完可能需要 20 秒以上,操作也比較繁瑣;
          2. 它是依賴短信網(wǎng)絡(luò)的,因?yàn)槿绻詹坏蕉绦牛簿偷卿洸涣肆恕?/span>
          3. 從安全角度考慮,還存在驗(yàn)證碼泄漏的風(fēng)險。如果有人知道了你的手機(jī)號,并且竊取到了驗(yàn)證碼,那他也能登錄你的賬號了。

          但回過頭來想一下,為什么我們需要驗(yàn)證碼?驗(yàn)證碼的作用就是確定這個手機(jī)號是你的,那除了使用短信,是否還有別的方式對手機(jī)號進(jìn)行認(rèn)證?

          1. 如果能獲取到當(dāng)前使用的手機(jī)號,就能對用戶輸入的號碼進(jìn)行驗(yàn)證了。但出于安全考慮,客戶端是無法直接獲取到手機(jī)號的,運(yùn)營商則可以通過 SIM 卡數(shù)據(jù)查詢到。
          2. 現(xiàn)在運(yùn)營商已經(jīng)開放了相關(guān)的能力,現(xiàn)在我們可以在用戶輸入手機(jī)號后,通過調(diào)用運(yùn)營商的接口,判斷用戶輸入的手機(jī)號是否和本地號碼一致。這樣一來,用戶就省去了等待驗(yàn)證碼短信、輸入驗(yàn)證碼的過程,也不受短信網(wǎng)絡(luò)的限制,簡化了登錄流程。
          3. 但再進(jìn)一步想,如果運(yùn)營商可以把當(dāng)前的號碼直接返回給我們,而不只是用于驗(yàn)證,那用戶連手機(jī)號都不需要填了。

          這就是該部分的主角:一鍵登錄 。

          3.2 本機(jī)號碼認(rèn)證

          獲取到當(dāng)前手機(jī)使用的手機(jī)卡號,直接使用這個號碼進(jìn)行登錄,這就是一鍵登錄。

          這種登錄方式的好處是顯而易見的。它可以更方便、快捷地完成注冊、登錄流程,將原本可能需要 20 秒的流程,縮短到了 2 秒左右,很大程度上提升了登錄的用戶體驗(yàn)。

          主要步驟如下:

          1. SDK 初始化:調(diào)用 SDK 的初始化方法,傳入項目在平臺上的 AppKey 和 AppSecret。
          2. 喚起授權(quán)頁:調(diào)用 SDK 喚起授權(quán)接口。SDK 會先向運(yùn)營商發(fā)起獲取手機(jī)號驗(yàn)碼的請求,請求成功后跳轉(zhuǎn)到授權(quán)頁。授權(quán)頁會顯示手機(jī)號掩碼以及運(yùn)營商協(xié)議給用戶確認(rèn)。
          3. 同意授權(quán)并登錄:用戶同意相關(guān)協(xié)議,點(diǎn)擊授權(quán)頁面的登錄按鈕,SDK 會請求本次取號的 token,請求成功后將 token 返回給客戶端。
          4. 取號:將獲取到的 token 發(fā)送到我們自己的服務(wù)器,由服務(wù)器攜帶 token 調(diào)用運(yùn)營商一鍵登錄的接口,調(diào)用成功就返回手機(jī)號碼了。服務(wù)器用手機(jī)號進(jìn)行登錄或注冊操作,返回操作結(jié)果給客戶端,完成一鍵登錄。

          目前阿里云已經(jīng)提供了該方式并可兼容三大運(yùn)營商的號碼,詳見 阿里云SDK:

          https://help.aliyun.com/document_detail/121113.html

          來源:juejin.cn/post/6844904053411938311


          推薦閱讀:

          世界的真實(shí)格局分析,地球人類社會底層運(yùn)行原理

          不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)

          億級(無限級)并發(fā),沒那么難

          論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

          華為干部與人才發(fā)展手冊(附PPT)

          企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

          【中臺實(shí)踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf

          華為的數(shù)字化轉(zhuǎn)型方法論

          華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)

          超詳細(xì)280頁Docker實(shí)戰(zhàn)文檔!開放下載

          華為大數(shù)據(jù)解決方案(PPT)


          瀏覽 27
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天日天天谢 | 丁香五月国内自拍 | 丰满大乳露双乳呻吟 | 久久综合国产视频 | 风流少妇一区二区三区91 |