小編給大家分享一下微信掃碼登錄原理的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在延平等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需設(shè)計(jì)網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),延平網(wǎng)站建設(shè)費(fèi)用合理。
微信掃碼登錄原理解析
掃碼登錄是現(xiàn)在流行的登錄方式,使用這種方式及其方便,而且安全
掃碼登錄流程
原理
獲取唯一的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 ? e.resolve(window.QRLogin.uuid) : e.reject(window.QRLogin.code) }).fail(function() { e.reject() }), e.promise }
瀏覽器輪詢服務(wù)器,獲取掃碼狀態(tài)
// 查看掃碼狀態(tài) checkLogin: function(e, a) { var n = t.defer() , a = a || 0; return window.code = 0, window.checkLoginPromise = $.ajax({ url: i.API_login + "?loginicon=true&uuid=" + 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 }
根據(jù)服務(wù)器返回的掃碼狀態(tài),進(jìn)行相應(yīng)的操作
408 掃碼超時(shí) 如果手機(jī)沒有掃碼或沒有授權(quán)登錄,服務(wù)器會(huì)阻塞約25s,然后返回狀態(tài)碼 408 -> 前端繼續(xù)輪詢
400 二維碼失效 大約5分鐘的時(shí)間內(nèi)不掃碼,二維碼失效
201 已掃碼 如果手機(jī)已經(jīng)掃碼,服務(wù)器立即返回狀態(tài)碼和用戶的基本信息 (window.code=201,window.code.userAvator="..."),-> 前端繼續(xù)輪詢
200 已授權(quán) 如果手機(jī)點(diǎn)擊了確認(rèn)登錄,服務(wù)器返回200及token -> 前端停止輪詢, 獲取到token,重定向到目標(biāo)頁
// 根據(jù)服務(wù)器返回的掃碼狀態(tài),進(jìn)行相應(yīng)的操作 function o(c) { switch (c.code) { case 200: t.newLoginPage(c.redirect_uri).then(function(t) { var o = t.match(/(.*)<\/ret>/) , r = t.match(/