您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何實(shí)現(xiàn)設(shè)計(jì)一個(gè)第三方賬號(hào)登陸”,在日常操作中,相信很多人在如何實(shí)現(xiàn)設(shè)計(jì)一個(gè)第三方賬號(hào)登陸問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何實(shí)現(xiàn)設(shè)計(jì)一個(gè)第三方賬號(hào)登陸”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
這里的多賬戶區(qū)別于系統(tǒng)級(jí)別的,我們講的多賬戶系統(tǒng)是指,在我們互聯(lián)網(wǎng)應(yīng)用當(dāng)中,我們的應(yīng)用會(huì)使用多個(gè)第三方賬號(hào)進(jìn)行登錄,必須現(xiàn)在常用的APP(網(wǎng)易云音樂(lè))登錄方式包含:網(wǎng)易、微信、QQ
通過(guò)這一篇文章, 可以學(xué)到:多用戶下面的技術(shù)方案細(xì)節(jié),以及相應(yīng)的表設(shè)計(jì),流程設(shè)計(jì)。 不可以:與其他文章一樣,我這里不會(huì)有具體代碼實(shí)現(xiàn)細(xì)節(jié),方案做的對(duì),代碼咋寫都不會(huì)太爛。
歸結(jié)為創(chuàng)業(yè)初期是因?yàn)檫@個(gè)時(shí)候用戶量比較少,甚至還沒有接入上面所說(shuō)的其他第三方的賬戶系統(tǒng),只是自建的體系就可以滿足,自建體系的話,目前常用的有
這種方式在很多初期網(wǎng)站建設(shè)會(huì)使用,先注冊(cè),再進(jìn)行登錄,在老一點(diǎn)的cms中都能找到這個(gè)影子。
流程圖:
流程說(shuō)明:
前端將用戶名、密碼發(fā)送到服務(wù)器,服務(wù)器進(jìn)行常規(guī)的判斷,判斷用戶名、密碼長(zhǎng)度是否滿足,用戶名是否重復(fù)等條件,條件不通過(guò)直接返回對(duì)應(yīng)錯(cuò)誤碼給到前端,這里密碼字段,為了防止傳輸過(guò)程中被截胡,建議加密再上傳,我們的傳輸密碼默認(rèn)都是會(huì)進(jìn)行一個(gè)md5加密,然后記錄到數(shù)據(jù)庫(kù)再進(jìn)行一層加密,就算是脫庫(kù)也沒事,密碼不要明文存儲(chǔ)。
校驗(yàn)通過(guò)后,就將用戶名密碼寫入數(shù)據(jù)庫(kù),并進(jìn)行后面積分發(fā)放等操作,這里不展開。
現(xiàn)在進(jìn)行登錄,前端將用戶名,密碼發(fā)送給到服務(wù)端,服務(wù)端首先會(huì)校驗(yàn)登錄次數(shù)是否超過(guò)設(shè)置的閾值,如果超過(guò)只能繼續(xù)等待被關(guān)小黑屋。
如果未超過(guò)繼續(xù)登錄邏輯,判斷用戶名、密碼是否正確,不正確密碼則進(jìn)行閾值的判斷,如果超過(guò)則關(guān)小黑屋,記住小黑屋必須設(shè)置過(guò)期時(shí)間,要不然就會(huì)永久關(guān)上了,這個(gè)可以用redis的過(guò)期來(lái)做。
登錄成功后進(jìn)行后續(xù)的一切后置邏輯,比如加積分。。。等操作。
流程圖:
流程說(shuō)明:
首先輸入手機(jī)號(hào),然后發(fā)送到服務(wù)端,服務(wù)端將手機(jī)號(hào)記錄在我們數(shù)據(jù)庫(kù)中,然后生成隨機(jī)驗(yàn)證碼,并將手機(jī)號(hào)和驗(yàn)證碼綁定到一個(gè)redis里面,然后記錄過(guò)期時(shí)間,這個(gè)過(guò)期時(shí)間一般是10分鐘左右,這就是我們一般手機(jī)驗(yàn)證碼的有效期。
手機(jī)接收到手機(jī)短信后,那么就在界面填寫驗(yàn)證碼發(fā)送服務(wù)端,服務(wù)端收到驗(yàn)證碼后就會(huì)在redis里面查詢到這個(gè)手機(jī)號(hào)對(duì)應(yīng)的驗(yàn)證碼,失敗就返回錯(cuò)誤碼。
成功后就進(jìn)行登錄操作。
這里看起來(lái)沒有明確的注冊(cè)登錄操作,其實(shí)在發(fā)送手機(jī)號(hào)碼就可以認(rèn)為是一個(gè)常規(guī)的注冊(cè),然后后面的驗(yàn)證碼輸入就是一個(gè)登陸操作,
問(wèn): 那我要密碼咋辦?
答: 在后續(xù)產(chǎn)品里面增加一個(gè)手機(jī)號(hào)碼密碼補(bǔ)錄的功能即可,這也是現(xiàn)在很常規(guī)的手法,但是現(xiàn)在移動(dòng)互聯(lián)網(wǎng)大爆炸時(shí)代,密碼已經(jīng)顯得不是那么重要了,反正我從來(lái)記不住密碼,如果手機(jī)號(hào)碼能操作的app,絕對(duì)不用密碼來(lái)操作。
自增id | 用戶名 | 密碼 | 手機(jī)號(hào) | 錯(cuò)誤次數(shù) |
---|---|---|---|---|
1 | user1 | 7fef6171469e80d32c0559f88b377245 | 13456789012 | 0 |
2 | user2 | 7fef6171469e80d32c0559f88b377245 | 13456789013 | 0 |
這里只是單純說(shuō)明需要用到的數(shù)據(jù),沒有擴(kuò)展具體場(chǎng)景,這個(gè)表結(jié)構(gòu)能夠滿足上面兩個(gè)方案的設(shè)計(jì)。
這里是以QQ-SDK的登錄邏輯, 我們先來(lái)一波時(shí)序圖
說(shuō)明:
客戶端自己調(diào)起登錄的界面,進(jìn)行輸入用戶名、密碼,這里的是第三方的用戶名,密碼,登錄成功后,會(huì)返回access_token openid expire_in,這過(guò)程會(huì)使用到oauth3.0,不過(guò)在sdk里面進(jìn)行內(nèi)置回調(diào)獲取了,后面我們會(huì)說(shuō)明我們自身實(shí)現(xiàn)的oauth3.0
客戶端拿到access_token、openid、login_type(qq、wechat...)請(qǐng)求應(yīng)用服務(wù)器,應(yīng)用服務(wù)器拿到這些數(shù)據(jù)后就會(huì)根據(jù)對(duì)應(yīng)的login_type去對(duì)應(yīng)的用戶中心進(jìn)行access_token和openid進(jìn)行校驗(yàn)。校驗(yàn)不通過(guò)則返回對(duì)應(yīng)錯(cuò)誤碼
校驗(yàn)通過(guò)后就會(huì)判斷本地是否有這個(gè)login_type和openid是否存在,不存在則進(jìn)行獲取遠(yuǎn)程的用戶名、頭像等基礎(chǔ)信息來(lái)作為本地基礎(chǔ)數(shù)據(jù),并且返回code值
如果已經(jīng)存在,那就是進(jìn)行登錄操作,返回code值。
客戶端拿到code值后進(jìn)行token值的換取,這個(gè)完全遵照oauth3.0的協(xié)議來(lái)走的,后續(xù)每次請(qǐng)求必須帶上token,token值在服務(wù)端的時(shí)間比較久,因?yàn)槲覀兿胍龅氖悄欠N永不下線的操作,所以每次請(qǐng)求我們都將token過(guò)期時(shí)間進(jìn)行累加。
對(duì)于評(píng)論處 @講不出再見1486617502000 的建議,我這里做一下數(shù)據(jù)庫(kù)的整理 用戶基礎(chǔ)表(users)
字段 | 備注 |
---|---|
user_id | 用戶id |
token | 用戶登陸的token |
expire_in | token過(guò)期時(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)識(shí) |
password | 用戶密碼 |
mobile | 用戶手機(jī) |
第三方用戶表(user_third_auth)
字段 | 備注 |
---|---|
auth_id | 用戶id |
openid | 第三方用戶唯一標(biāo)識(shí) |
login_type | 第三方平臺(tái)標(biāo)識(shí)(qq、wechat...) |
access_token | 第三方獲取的access_token,校驗(yàn)使用 |
說(shuō)明
users表只是單純針對(duì)我們業(yè)務(wù)側(cè)的登錄,主要是做自身業(yè)務(wù)的oauth3.0業(yè)務(wù),
user_local_auth是做自己用戶名、密碼登錄,手機(jī)號(hào)碼登錄信息記錄,
user_third_auth是我們第三方用戶體系的數(shù)據(jù)記錄,
user_auth_rel是用來(lái)關(guān)聯(lián)我們users表與user_local_auth、user_third_auth。
整個(gè)設(shè)計(jì)理念就是將自建用戶與第三方在存儲(chǔ)上區(qū)分,這在架構(gòu)演進(jìn)上也是合乎情理的,開始用戶體系大多自建,而后才是對(duì)外接入。
到此,關(guān)于“如何實(shí)現(xiàn)設(shè)計(jì)一個(gè)第三方賬號(hào)登陸”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。