浅析微信扫码登录原理(小结)
微信扫码登录原理解析
扫码登录是现在流行的登录方式,使用这种方式及其方便,而且安全扫码登录流程
原理
获取唯一的uuid,以及包含用户界面设计(用户界面设计的缩写)信息的二维码
//获取uuid getUUID:函数(){ var e=t . delay();返回窗口QRLogin={},美元.ajax({ url: i.API_jsLogin,dataType: 'script' }).完成(函数(){ 200==window .二维码?e.resolve(窗口: e.reject(窗口QR LogOn。代码)}).fail(function() { e.reject() }),e.promise }浏览器轮询服务器,获取扫码状态
//查看扫码状态检查日志:函数(e,a){ var n=t . delay(),a=a | | 0;返回window.code=0,window.checkLoginPromise=$ .ajax({ url: i.API_login '?loginicon=truuuid=' e ' tip=' a ' r=' ~ new Date,dataType: 'script ',timeout: 35e3 }).done(function(){ new RegExp('/'位置。host '/');if(窗口。重定向uri窗口。重定向uri。位置的索引。主机'/')0)返回void(位置。href=窗口。redirect _ uri);var e={ code: window.code,redirect _ uri : window。重定向_ uri,用户头像:窗口。用户头像};n.resolve(e) }).fail(function() { n.reject() }),n.promise}根据服务器返回的扫码状态,进行相应的操作
408 扫码超时如果手机没有扫码或没有授权登录,服务器会阻塞约25秒,然后返回状态码408 - 前端继续轮询
400 二维码失效大约5分钟的时间内不扫码,二维码失效
201 已扫码如果手机已经扫码,服务器立即返回状态码和用户的基本信息(window.code=201,window.code.userAvator=' . '),- 前端继续轮询
200 已授权如果手机点击了确认登录,服务器返回200及令牌-前端停止轮询,获取到令牌,重定向到目标页
//根据服务器返回的扫码状态,进行相应的操作函数o(c){开关(c .代码){案例200:t。新登录页面.然后(函数(t) { var o=t.match(/ret(.*)\/ret/),r=t.match(/script().*)\/script/),c=t.match(/skey(.*)\/skey/),s=t.match(/wxsid(.*)\/wxsid/),l=t.match(/wxuin(.*)\/wxuin/),d=t.match(/pass_ticket().*)\/pass_ticket/),f=t.match(/message(.*)\/message/),u=t.match(/redirecturl().*)\/redirecturl/);返回你呢?void(窗口。位置。href=u[1]): o“0”!=o[1]?(警报(f[1] || '登陆失败),i.report(i.AUTH_FAIL_COUNT,1),void location.reload()) :(例如$emit('newLoginPage ',{ Ret: o o[1],ske 3360 c c[1],Sid: s s[1],Uin: l l[1],pass ticket 3360d[1],Code: r }),void(a . getcookie(' webwx _ data _ ticket ')| | n票据丢失,cookie :文档。cookie })))});打破;案例201: e.isScan=!0,n.report(n.ReportType.timing,{ timing : { scan : date。now()}),t.checkLogin(e.uuid).然后(o,函数(t) {!t窗口。checkloginPromise(e . ISbrokenNetwork=!0) });打破;案例408:t。检查登录(例如uuid).然后(o,函数(t) {!t窗口。checkloginPromise(e . ISbrokenNetwork=!0) });打破;案例400:案例500:案例0: var s=a . GetCookie('刷新次数')| | 0;s 5?(s,a.setCookie('refreshTimes ',s .5),文档。位置。reload()): e . isnedrefresh=!0;打破;案例202: e.isScan=!1、e.isAssociationLogin=!1,a.setCookie('login_frequency ',0,2),窗口。checkloginpromise(窗口。支票承诺。abort()、window . checkloginprotroise=null)、r() } e.code=c.code、e.userAvatar=c.userAvatar、a.log('get code ',c.code)}总结
轮询采用JSONP的形式,根据扫码排除阻塞前台请求的后台,优化轮询,减少前端无效轮询。以上就是本文的全部内容,希望对大家的学习有所帮助,支持我们。
版权声明:浅析微信扫码登录原理(小结)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















