1. 程式人生 > >Channels實現掃碼登錄

Channels實現掃碼登錄

後端 djang 最好 代碼 socket 根據 自己 目前 http

參考了下別人說的原理,根據自己的邏輯實現,沒有完全按照別人的原理來,所以不一定完全適用於你們,僅供參考吧!!!

流程如下:

  1. web發起websocket鏈接,後端接受鏈接後立馬發送第一次消息,為全局唯一標識key
  2. web收到第一次的消息,將字符串生成二維碼展現出來
  3. App進行掃碼獲取key,並當做參數調用後端接口,成功則App提示用戶

  4. 後端收到App的請求,成功處理則向web發送第二次消息,為身份標識token,並關閉連接

  5. web收到token,存到本地,再做登錄成功的邏輯,就o了

Django實現websocket的包目前只了解到channels跟dwebsocket,channels維護得比較好,功能也強大一些,所以采用channels了

具體怎麽判斷App是否掃碼了,我是這樣做的(僅供參考):

  在後端生成key的時候,就存入redis,值為空。然後循環檢測該值是否不為空,不為空就當做token發送給web,超時就提醒web。app掃碼後調用後端接口時,後端就根據key將值設為身份token,前面循環檢測到不為空,就...

當然,可以去掉循環檢測,讓app也走websocket,把整體當做一個聊天室,可能更好一點。但是由於某些原因,app同事不想用這個,那就算了嘛

下面展示主要代碼,嘿嘿,代碼量是真的少

跟Web的交流代碼:

技術分享圖片

App掃碼之後調用的接口代碼:

技術分享圖片

對了, 正式部署到服務器的時候,channels得用daphne啟動,然後最好配置一下由nginx轉發請求,具體百度吧

Channels實現掃碼登錄