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

Channels實現掃碼登入

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

流程如下:

  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轉發請求,具體百度吧