要實現手機掃碼登錄,需要服務端、web前端和手機移動端App三方合作,大致邏輯流程是這樣的。
1. web端向服務端發出請求getScanCode,獲取一個用於生成二維碼的信息字符串,這個信息字符串包含表示此次登錄的識別碼,可以設計爲安全token;
2. 服務端收到web端的請求,會生成一個識別碼,返回給web端,同時將其加入數據庫,這個數據庫可以是sql,也可以是nosql,我在這裏爲了移植方便,不使用外部數據庫,而是在內存創建map來保存。其數據具有有效時間限制;
3. web端收到響應信息,解析出識別碼之後,顯示二維碼圖形等待掃描,並且開始輪詢服務端askLogin,查詢匹配識別碼的登錄狀態,獲取登錄信息。這裏的輪詢可以是tcp,不過我在這裏使用的是http接口;
4. 手機app在已經登錄的情況下,掃描web端的二維碼,獲取二維碼中包含的識別碼,然後帶着識別碼和自己的登錄信息,向服務端發出登錄請求login。我這裏沒有去實現手機端App的登錄,因爲那在這裏不重要,我直接在手機端輸入用戶名和密碼權做登錄。用戶驗證信息依然放在內存當中。
5. 服務端收到App發來的login登錄請求,驗證用戶信息,修改掃碼登錄識別碼的數據;
6. web端輪詢查到掃碼識別碼登錄信息符合要求,服務端就會把登錄用戶的信息返回給web端;
7. web端收到服務端返回的成功登錄的信息,立即隱藏二維碼,顯示用戶登錄信息,或者跳轉頁面。
文章鏈接:
掃碼登錄的簡單實現-服務器端: https://blog.csdn.net/xxkalychen/article/details/102373570
掃碼登錄的簡單實現-Web端: https://blog.csdn.net/xxkalychen/article/details/102375025
掃碼登錄的簡單實現-移動App端: https://blog.csdn.net/xxkalychen/article/details/102375560