第三方登录如何给前台返回token_如何设计优雅的第三方账号登录?
#?前言
????在互聯網應用中,我們構建一個網站或APP,如果沒有用戶,那就沒有價值。所以,如何吸引用戶注冊和登錄,是一個重要問題,而這就涉及到賬號體系了。
? ? 在應用構建初期,用戶量較少,那么自建系統的賬號體系就可以滿足本身系統的業務需求。當應用用戶量較多時(比如QQ、微信等用戶量較多的應用),可提供第三方授權登錄系統,為其他應用提供登錄功能需求。常用登錄如下:
#?常用登錄設計
? ???##??用戶/密碼注冊登錄
????其實很多最初構建的應用系統都是采用這種方式,用戶先注冊,再登錄,才可操作相應業務。其流程圖如下:
? ? 用戶注冊:
????流程說明:
前端將用戶名/密碼發送到服務器,服務器進行常規的判斷,判斷用戶名、密碼長度、字符是否滿足要求、用戶是否已經存在等條件,當條件不滿足時候,將對應錯誤碼返回給前端。
此刻的密碼需要進行相應的加密,默認是md5加密,從而防止傳輸過程中數據被攔截,從而被盜號。
數據校驗成功后,便將數據寫入數據庫。
????用戶登錄:
????流程說明:
用戶登錄,前端將用戶名/密碼發送到服務器端,服務器端首先校驗登錄次數是否超過設置的閥值,如果超過便等待一段時間(系統設置的過期時間)
如果未超過登錄次數閥值,便判斷用戶名/密碼是否正確,如果不正確便增加登錄失敗次數,如果此時失敗次數超過了閥值,便進入等待階段,系統自動鎖定一段時間(如上)。
登錄成功后才可操作相應的業務。
????##?手機號注冊登錄
????隨著智能移動設備的普及,以及短信業務的成熟,現在很多應用都逐漸采用手機號注冊登錄這種方式來作為應用的登錄需求。手機號注冊登錄這種方式省略常規的注冊,通過驗證碼來進行注冊登錄,當用戶進入應用后進行一個信息補錄,完善用戶信息即可。在如今信息時代,密碼也就變得不那么重要了,手機號-驗證碼這種方式讓用戶能輕便的快速使用應用,不用去記太多的密碼。其流程圖如下:
????流程說明:
用戶輸入手機號,然后發送到服務端,服務端將手機號記錄在我們數據庫中,然后生成隨機驗證碼,并將手機號和驗證碼綁定到一個redis里面,然后記錄過期時間,通常過期時間一般是10分鐘左右,這就是我們一般手機驗證碼的有效期。
手機收到短信后,填寫驗證碼發送到服務器端,服務器端通過查詢Redis中的發送手機對于的驗證碼,比對兩者,失敗返回對于錯誤碼。
成功后可操作后續業務。
????數據庫表設計(根據業務進行修改):?
| auto_id | userName | passWord | telephone | err_num |
| 1 | user1 | 8js3d4w..... | 13847387443 | 2 |
| 2 | user2 | 2h1d68f..... | 19827372347 | 0 |
#?第三方登錄設計
????在開發微信小程序時,微信其實就是第三方,小程序的登錄,實際上可以理解為以微信作為第三方進行授權登錄,其流程和QQ、微博登錄的流程幾乎一致。時序圖如下:
實現思路:
客戶端調用?wx.login()?獲取?臨時登錄憑證code?,并通過?wx.request()回傳到開發者服務器。
使用?appid+appsecret+code?做參數,調用?auth.code2Session?接口,換取?用戶唯一標識 OpenID?和?會話密鑰 session_key,并返回與OpenID?和?session_key關聯的自定義的登錄態。客戶端將自定義登錄態存入?storage。
之后開發者服務器可以根據用戶標識來生成自定義登錄態,用于后續業務邏輯中前后端交互時識別用戶身份。
客戶端再登錄時,通過查詢本地?storage?是否存在自定義登錄態,存在則調用?wx.request() 攜帶自定義登錄態,通過自定義登錄態去查詢 openid 和 Session_key ,從而返回業務數據。
?數據庫表設計:
用戶表(users Table):
| 字段 | 備注 |
| user_id | 用戶id |
| token | 用戶登錄的token |
| expire_in | token過期時間 |
| try_times | 登錄失敗次數 |
用戶驗證關聯表(user_auth_rel Table):
| 字段 | 備注 |
| id | 自增id |
| user_id | 用戶id |
| auth_id | 驗證表id |
| auth_type | 驗證類型(local、third) |
本地用戶表(user_local_auth Table):
| 字段 | 備注 |
| auth_id | 認證id(自增id) |
| user_name | 用戶key |
| password | 密碼 |
| mobile | 用戶手機號 |
第三方用戶表(user_third_auth?Table):
| 字段 | 備注 |
| auth_id | 用戶id |
| openid | 第三方用戶唯一標識 |
| login_type | 第三方平臺標識(wechat、QQ等) |
| access_token | 第三方獲取的access_token(校驗使用) |
補充說明:
users 表只針對登錄業務
user_local_auth?用于存儲用戶名/密碼、手機號登錄記錄
user_third_auth?用戶第三方用戶體系的數據記錄
user_auth_rel?是用來關聯 users?、user_local_auth、user_third_auth
采用自建用戶與第三方登錄數據分開存儲
總結
以上是生活随笔為你收集整理的第三方登录如何给前台返回token_如何设计优雅的第三方账号登录?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀100强什么意思
- 下一篇: bootstrap算法_决策树算法之随机