站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        詳解Vue PC端如何實現(xiàn)掃碼登錄功能

        本篇文章給大家?guī)砹岁P(guān)于Vue的相關(guān)知識,其中主要介紹了在PC端實現(xiàn)掃碼的原理是什么?怎么生成二維碼圖片?怎么用Vue實現(xiàn)前端掃碼登錄?感興趣的朋友,下面一起來看一下吧,希望對大家有幫助。

        需求描述

        目前大多數(shù)PC端應(yīng)用都有配套的移動端APP,如微信,淘寶等,通過使用手機APP上的掃一掃功能去掃頁面二維碼圖片進行登錄,使得用戶登錄操作更方便,安全,快捷。

        思路解析

        PC 掃碼原理?

        掃碼登錄功能涉及到網(wǎng)頁端、服務(wù)器和手機端,三端之間交互大致步驟如下:

        • 網(wǎng)頁端展示二維碼,同時不斷的向服務(wù)端發(fā)送請求詢問該二維碼的狀態(tài);

        • 手機端掃描二維碼,讀取二維碼成功后,跳轉(zhuǎn)至確認登錄頁,若用戶確認登錄,則服務(wù)器修改二維碼狀態(tài),并返回用戶登錄信息;

        • 網(wǎng)頁端收到服務(wù)器端二維碼狀態(tài)改變,則跳轉(zhuǎn)登錄后頁面;

        • 若超過一定時間用戶未操作,網(wǎng)頁端二維碼失效,需要重新刷新生成新的二維碼。

        前端功能實現(xiàn)

        如何生成二維碼圖片?

        • 二維碼內(nèi)容是一段字符串,可以使用uuid 作為二維碼的唯一標識;
        • 使用qrcode插件 import QRCode from 'qrcode'; 把uuid變?yōu)槎S碼展示給用戶

        import {v4 as uuidv4} from "uuid" import QRCode from "qrcodejs2"  let timeStamp = new Date().getTime() // 生成時間戳,用于后臺校驗有效期  let uuid = uuidv4()  let content = `uid=${uid}&timeStamp=${timeStamp}`  this.$nextTick(()=> {      const qrcode = new QRCode(this.$refs.qrcode, {        text: content,        width: 180,        height: 180,        colorDark: "#333333",        colorlight: "#ffffff",        correctLevel: QRCode.correctLevel.H,        render: "canvas"      })      qrcode._el.title = ''
        登錄后復(fù)制

        如何控制二維碼的時效性?

        使用前端計時器setInterval, 初始化有效時間effectiveTime, 倒計時失效后重新刷新二維碼

        export default {   name: "qrCode",   data() {     return {       codeStatus: 1, // 1- 未掃碼 2-掃碼通過 3-過期       effectiveTime: 30, // 有效時間       qrCodeTimer: null // 有效時長計時器       uid: '',       time: ''     };   },    methods: {     // 輪詢獲取二維碼狀態(tài)     getQcodeStatus() {       if(!this.qsCodeTimer) {         this.qrCodeTimer = setInterval(()=> {           // 二維碼過期           if(this.effectiveTime <=0) {             this.codeStatus = 3             clearInterval(this.qsCodeTimer)             this.qsCodeTimer = null             return           }           this.effectiveTime--         }, 1000)       }      },         // 刷新二維碼     refreshCode() {       this.codeStatus = 1       this.effectiveTime = 30       this.qsCodeTimer = null       this.generateORCode()     }   },
        登錄后復(fù)制

        前端如何獲取服務(wù)器二維碼的狀態(tài)?

        前端向服務(wù)端發(fā)送二維碼狀態(tài)查詢請求,通常使用輪詢的方式

        • 定時輪詢:間隔1s 或特定時段發(fā)送請求,通過調(diào)用setInterval(), clearInterval()來停止;
        • 長輪詢:前端判斷接收到的返回結(jié)果,若二維碼仍未被掃描,則會繼續(xù)發(fā)送查詢請求,直至狀態(tài)發(fā)生變化(失效或掃碼成功)
        • Websocket:前端在生成二維碼后,會與后端建立連接,一旦后端發(fā)現(xiàn)二維碼狀態(tài)變化,可直接通過建立的連接主動推送信息給前端。

        使用長輪詢實現(xiàn):

         // 獲取后臺狀態(tài)     async checkQRcodeStatus() {        const res = await checkQRcode({          uid: this.uid,          time: this.time        })        if(res && res.code == 200) {          let codeStatus - res.codeStatus          this.codeStatus =  codeStatus          let loginData = res.loginData          switch(codeStatus) {            case 3:               console.log("二維碼過期")               clearInterval(this.qsCodeTimer)               this.qsCodeTimer = null               this.effectiveTime = 0             break;             case 2:               console.log("掃碼通過")               clearInterval(this.qsCodeTimer)               this.qsCodeTimer = null               this.$emit("login", loginData)             break;             case 1:               console.log("未掃碼")               this.effectiveTime > 0  && this.checkQRcodeStatus()             break;             default:             break;          }        }      },
        登錄后復(fù)制

        推薦學習:《vue.js視頻教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 99久久国产综合精品五月天喷水| 国产亚洲精品资源在线26u| 免费看污污的网站欧美国产精品不卡在线观看| 亚洲国产精品无码成人片久久| 三级高清精品国产| 久久成人影院精品777| 999国产精品色在线播放| 国产精品免费久久久久电影网| 国产精品天干天干综合网| 亚洲第一区精品观看| 国产精品自产拍高潮在线观看| 一本之道av不卡精品| 国产精品免费在线播放| 国产精品高清视亚洲精品| 国产偷国产偷高清精品| 久久久久夜夜夜精品国产| 国产成人精品免费久久久久| 无码国产69精品久久久久网站| 欧美精品亚洲日韩aⅴ| 久草视频精品在线| 国产精品偷伦视频观看免费| 野狼第一精品社区| 无码精品蜜桃一区二区三区WW| 国内精品伊人久久久久网站| 99久久国产综合精品网成人影院| 国产精品一久久香蕉国产线看| 69SEX久久精品国产麻豆| 国产精品成人观看视频国产奇米| 欧美午夜精品久久久久免费视| 亚洲精品无码午夜福利中文字幕| 亚洲乱码日产精品a级毛片久久| 欧美精品亚洲精品日韩专区 | 亚洲精品成人无码中文毛片不卡| 日本精品自产拍在线观看中文 | 亚洲中文字幕久久精品无码APP| 天天视频国产精品| 亚洲精品综合久久| 四虎影视永久在线观看精品| 日韩欧精品无码视频无删节| 欧美肥屁VIDEOSSEX精品| 精品久久人妻av中文字幕|