C(++) Websocket实现扫码二维码登录---GoEasy
首先我們先理一下微信的實現(xiàn)思路,來方便我們理解解決這一難題的思路方向。微信登錄的二維碼實際上是將一個URL轉(zhuǎn)換成二維碼的形式,而通過微信客戶端掃碼后,無非就是打開了這個url, 我捕捉到的微信二維碼的url為https://login.weixin.qq.com/l/YdmTu30I5A==?,這個url里的YdmTu30I5A==代表的是本次會話的唯一ID, 這個有點兒類似瀏覽器里的session id,通過這個ID,微信就能定向?qū)⒋_認結(jié)果反饋到網(wǎng)頁上。使用微信二維碼登錄功能,需要有兩個前提:一是客戶端上需要安裝微信app。二是用戶需要登錄到到微信app。https://wx.qq.com/
?
C(++) Websocket消息推送
?
為什么要有這兩個條件呢?那是因為微信在確認是否允許登錄到網(wǎng)頁版的時候,微信需要提取當前app的登錄信息并將上面的session ID一并發(fā)給服務(wù)器,這樣服務(wù)器收到了登錄信息和sessionID后就可以確認兩件事:一是用來確認登錄的客戶端的用戶是驗證過的;二是通過sessionID服務(wù)器知道將反饋結(jié)果推送到哪個網(wǎng)頁。
?? 所以針對第一點,我們的關(guān)鍵在于,在掃描前要確保用戶是已經(jīng)被驗證過且合法的用戶(驗證方式可以是用戶名+密碼,也可以是一個secure key),在選擇是否登錄時將這個結(jié)果一并推送到服務(wù)器端,就好了。如果用戶沒有驗證是否合法,可以像微信的處理方式一樣直接告訴用戶二維碼不可識別或提示請先登錄到app。
? 有了身份驗證,那么現(xiàn)在就解決第二個問題,如何將反饋結(jié)果實時地顯示在網(wǎng)頁上呢?有朋友可能會說,客戶端這邊很簡單發(fā)一個請求到后臺就好了,而網(wǎng)頁上用ajax定時發(fā)送到服務(wù)器端看是否有反饋。我不贊成這種做法,因為ajax輪詢方式十分消耗客戶端和服務(wù)器端資源!這里涉及到另一個技術(shù)-web實時推送技術(shù),使用推送技術(shù)可以節(jié)約服務(wù)器端和客戶端的資源,可以穩(wěn)定地推送和接收任何消息。我在實現(xiàn)的過程中我采用了第三方推送服務(wù)-GoEasy推送,用它是實現(xiàn)非常簡單,我們項目里的其他功能也用到了GoEasy web實時推送服務(wù),所以在此我直接就用的GoEasy推送來將登錄反饋結(jié)果推送到服務(wù)器。我的實現(xiàn)步驟非常簡單,將傳送的session ID作為客戶端與網(wǎng)頁端的通信channel,網(wǎng)頁端訂閱用session ID作為值得channel,客戶端將驗證結(jié)果和session ID發(fā)送到服務(wù)器端,服務(wù)器端可以通過這個channel主動將結(jié)果推送給網(wǎng)頁版!如果客戶端也需要做相應(yīng)的反饋的話,那么客戶端也只需要訂閱這個channel,然后服務(wù)器端會同時將結(jié)果推送給網(wǎng)頁版和客戶端,收到消息后,就可以根據(jù)需求在goeasy的回調(diào)函數(shù)里做你想做的事情了。關(guān)于goeasy推送的使用,大家可以參考這篇博客:?http://www.cnblogs.com/jishaochengduo/articles/5552645.html,另外GoEasy推送官網(wǎng)上也有一個demo:GoEasy二維碼掃碼登錄demo,大家可以去看看效果.
? 希望對大家有幫助,如有理解錯誤的地方,還請大家斧正。
轉(zhuǎn)載于:https://blog.51cto.com/12271250/1879571
總結(jié)
以上是生活随笔為你收集整理的C(++) Websocket实现扫码二维码登录---GoEasy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vagrant学习笔记 - 基本命令的使
- 下一篇: UIAlertController的使用