自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

微信二維碼登錄原理

開發(fā) 前端
在電腦上使用微信時,你可能已經(jīng)發(fā)現(xiàn)微信不提供傳統(tǒng)的賬號密碼登陸,取而代之的是通過掃描二維碼進行登陸。今天就要研究下次登陸方式微信時如何實現(xiàn)的?

在電腦上使用微信時,你可能已經(jīng)發(fā)現(xiàn)微信不提供傳統(tǒng)的賬號密碼登陸,取而代之的是通過掃描二維碼進行登陸。今天就要研究下次登陸方式微信時如何實現(xiàn)的?

1、每次用戶打開PC端登陸請求,系統(tǒng)返回一個***的uid,并將uid的信息繪制成二維碼返回給用戶。這里的uid一定是***的,否則就會造成你登陸了其他用戶的賬號或者其他用戶登陸你的賬號。

2、當(dāng)用戶使用登陸后的微信掃描該二維碼的時候,會將這個uid和手機上的微信賬號及密碼產(chǎn)生的token進行綁定,并上傳到服務(wù)器。

3、WEB通過JS不斷的向后端發(fā)起請求,查詢有沒有關(guān)于uid的登陸記錄(uid和token是否存在于服務(wù)器上)。實現(xiàn)代碼可以從微信頁面獲?。?/p>

  1. function _poll(_asUUID) { 
  2.         var _self = arguments.callee, 
  3.             _nTime = 0; 
  4.         _sCurUUId = _asUUID; 
  5.  
  6.         _logInPage("_poll Request Start, time: " + new Date().getTime()); 
  7.         _nTime = new Date().getTime(); 
  8.         $.ajax({ 
  9.         type: "GET"
  10.         url: "https://login." + _sBaseHost + "/cgi-bin/mmwebwx-bin/login?uuid=" + _asUUID + "&tip=" + show_tip, 
  11.         dataType: "script"
  12.         cache: false
  13.         timeout: _nAjaxTimeout, 
  14.         success: function(data, textStatus, jqXHR) { 
  15.             _logInPage("_poll Request Success, code: " + window.code + ", time: " + (new Date().getTime() - _nTime) + "ms"); 
  16.             switch (_aoWin.code) { 
  17.             case 200: 
  18.                 _sSecondRequestTime = new Date().getTime() - _sSecondRequestTime; 
  19.                 _logInPage("Second Request Success, time: " + _sSecondRequestTime + "ms"); 
  20.                 clearTimeout(_oResetTimeout); 
  21.  
  22.                 $.get(_aoWin.redirect_uri + "&fun=new"function(msg) { 
  23.                     _logInPage("new func reponse, reponseMsg: " + msg); 
  24.                     _reportNow("new func reponse, reponseMsg: " + msg); 
  25.                     var code = msg.match(/<script>(.*)<\/script>/); 
  26.                     if(code){ 
  27.                         eval(code[1]); 
  28.                     }else
  29.                         $("#container").show(); 
  30.                         $("#login_container").hide(); 
  31.                     } 
  32.                 }); 
  33.  
  34.                 _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Success, uuid: " + _asUUID + ", time: " + _sSecondRequestTime + "ms"); 
  35.                 break
  36.  
  37.             case 201: 
  38.                 clearTimeout(_oResetTimeout); 
  39.                 show_tip = 0; 
  40.                 $('.errorMsg').hide(); 
  41.                 $('.normlDesc').hide(); 
  42.                 $('.successMsg').show(); 
  43.                 _logInPage("First Request Success"); 
  44.                 _reportNow("/cgi-bin/mmwebwx-bin/login, First Request Success, uuid: " + _asUUID); 
  45. //                setTimeout(function(){ 
  46.                     _logInPage("Second Request Start"); 
  47.                     _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Start, uuid: " + _asUUID); 
  48.  
  49.                     _sSecondRequestTime = new Date().getTime(); 
  50.  
  51.                     _nAjaxTimeout = 5 * 1000; 
  52.                     _self(_asUUID); 
  53. //                }, 500); 
  54.                 break
  55.  
  56.             case 408: 
  57.                 setTimeout(function(){ 
  58.                     _self(_asUUID); 
  59.                 }, 500); 
  60.                 break
  61.  
  62.             case 400: 
  63.             case 500: 
  64.                 _reset(); 
  65.                 _afterLoadWebMMDo(function(){ 
  66.                     _aoWin.Log.d("500, Login Poll Svr Exception"); 
  67.                 }); 
  68.                 break
  69.             } 
  70.         }, 
  71.         error: function(jqXHR, textStatus, errorThrown) { 
  72.             if (textStatus == 'timeout') { 
  73.                 setTimeout(function(){ 
  74.                     _self(_asUUID); 
  75.                 }, 500); 
  76.             } else { 
  77.                 setTimeout(function(){ 
  78.                     _self(_asUUID); 
  79.                 }, 5000); 
  80.  
  81.                 _logInPage("_poll Request Error:" + textStatus); 
  82.                 _afterLoadWebMMDo(function(){ 
  83.                     _aoWin.Log.e("Login Poll Error:" + textStatus); 
  84.                 }); 
  85.             } 
  86.         } 
  87.         }); 
  88.     } 

網(wǎng)頁客戶端每500毫秒就向服務(wù)器發(fā)起ssl請求,請求當(dāng)前二維碼的登陸信息,如果返回結(jié)果201,則說明已經(jīng)獲取掃描二維碼終端相同的賬號登陸授權(quán),當(dāng)返回其他結(jié)果時,將在500毫秒之后重新發(fā)起請求。

類似微信登陸場景應(yīng)用場景還是很多,比如通過二維碼進行設(shè)備間的授權(quán)。比如使用手機遙控 裝有android系統(tǒng)的電視盒等。

原文鏈接:http://www.biaodianfu.com/weixin-qrcode.html

責(zé)任編輯:陳四芳 來源: biaodianfu
相關(guān)推薦

2024-06-26 08:46:45

2015-07-22 10:46:20

二維碼掃描

2020-04-01 10:06:41

二維碼技術(shù)服務(wù)端

2013-01-30 12:16:49

二維碼NFC近場通訊

2013-08-22 10:04:09

2021-09-08 10:02:56

面試二維碼前端

2024-03-07 07:59:37

2013-10-29 09:46:05

二維碼

2020-12-24 18:48:36

二維碼二進制條形碼

2023-11-17 09:07:51

.NET生成二維碼識別二維碼

2024-11-20 13:00:02

2017-02-21 09:17:46

二維碼漏洞

2023-11-17 15:44:06

C++庫生成二維碼

2011-12-06 16:40:45

二維碼快拍二維碼靈動快拍

2014-11-13 17:48:21

2023-12-25 14:53:36

2012-04-01 09:53:13

二維碼

2015-09-24 09:56:19

.NET二維碼

2015-10-28 13:33:50

二維碼條形碼掃描源碼

2020-10-08 18:48:02

二維碼安全應(yīng)用安全網(wǎng)絡(luò)攻擊
點贊
收藏

51CTO技術(shù)棧公眾號