微信扫码登录原理解析
扫码登录是现在流行的登录方式,使用这种方式及其方便,而且安全
扫码登录流程
原理
获取唯一的uuid, 以及包含uid信息的二维码
// 获取uuid getUUID: function() { var e = t.defer(); return window.QRLogin = {}, $.ajax({ url: i.API_jsLogin, dataType: "script" }).done(function() { 200 == window.QRLogin.code "htmlcode">// 查看扫码状态 checkLogin: function(e, a) { var n = t.defer() , a = a || 0; return window.code = 0, window.checkLoginPromise = $.ajax({ url: i.API_login + "" + e + "&tip=" + a + "&r=" + ~new Date, dataType: "script", timeout: 35e3 }).done(function() { new RegExp("/" + location.host + "/"); if (window.redirect_uri && window.redirect_uri.indexOf("/" + location.host + "/") < 0) return void (location.href = window.redirect_uri); var e = { code: window.code, redirect_uri: window.redirect_uri, userAvatar: window.userAvatar }; n.resolve(e) }).fail(function() { n.reject() }), n.promise }根据服务器返回的扫码状态,进行相应的操作
408 扫码超时 如果手机没有扫码或没有授权登录,服务器会阻塞约25s,然后返回状态码 408 -> 前端继续轮询
400 二维码失效 大约5分钟的时间内不扫码,二维码失效
201 已扫码 如果手机已经扫码,服务器立即返回状态码和用户的基本信息 (window.code=201,window.code.userAvator="..."),-> 前端继续轮询
200 已授权 如果手机点击了确认登录,服务器返回200及token -> 前端停止轮询, 获取到token,重定向到目标页
// 根据服务器返回的扫码状态,进行相应的操作 function o(c) { switch (c.code) { case 200: t.newLoginPage(c.redirect_uri).then(function(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>/); return u "0" != o[1] "登陆失败"), i.report(i.AUTH_FAIL_COUNT, 1), void location.reload()) : (e.$emit("newLoginPage", { Ret: o && o[1], SKey: c && c[1], Sid: s && s[1], Uin: l && l[1], Passticket: d && d[1], Code: r }), void (a.getCookie("webwx_data_ticket") || n.report(n.ReportType.cookieError, { text: "webwx_data_ticket 票据丢失", cookie: document.cookie }))) }); break; case 201: e.isScan = !0, n.report(n.ReportType.timing, { timing: { scan: Date.now() } }), t.checkLogin(e.uuid).then(o, function(t) { !t && window.checkLoginPromise && (e.isBrokenNetwork = !0) }); break; case 408: t.checkLogin(e.uuid).then(o, function(t) { !t && window.checkLoginPromise && (e.isBrokenNetwork = !0) }); break; case 400: case 500: case 0: var s = a.getCookie("refreshTimes") || 0; s < 5 "refreshTimes", s, .5), document.location.reload()) : e.isNeedRefresh = !0; break; case 202: e.isScan = !1, e.isAssociationLogin = !1, a.setCookie("login_frequency", 0, 2), window.checkLoginPromise && (window.checkLoginPromise.abort(), window.checkLoginPromise = null ), r() } e.code = c.code, e.userAvatar = c.userAvatar, a.log("get code", c.code) }总结
- 轮询采用的是JSONP的形式,排除了跨域问题
- 轮询采用的后台根据扫码情况阻塞前台请求,优化轮询及减少前端的无效轮询
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:
微信扫码登录,微信登录原理
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“浅析微信扫码登录原理(小结)”评论...
更新动态
2025年01月15日
2025年01月15日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]