站長資訊網
最全最豐富的資訊網站

詳解Vue PC端如何實現掃碼登錄功能

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

需求描述

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

思路解析

PC 掃碼原理?

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

  • 網頁端展示二維碼,同時不斷的向服務端發送請求詢問該二維碼的狀態;

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

  • 網頁端收到服務器端二維碼狀態改變,則跳轉登錄后頁面;

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

前端功能實現

如何生成二維碼圖片?

  • 二維碼內容是一段字符串,可以使用uuid 作為二維碼的唯一標識;
  • 使用qrcode插件 import QRCode from 'qrcode'; 把uuid變為二維碼展示給用戶

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 = ''
登錄后復制

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

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

export default {   name: "qrCode",   data() {     return {       codeStatus: 1, // 1- 未掃碼 2-掃碼通過 3-過期       effectiveTime: 30, // 有效時間       qrCodeTimer: null // 有效時長計時器       uid: '',       time: ''     };   },    methods: {     // 輪詢獲取二維碼狀態     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()     }   },
登錄后復制

前端如何獲取服務器二維碼的狀態?

前端向服務端發送二維碼狀態查詢請求,通常使用輪詢的方式

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

使用長輪詢實現:

 // 獲取后臺狀態     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;          }        }      },
登錄后復制

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

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
伊人精品视频在线| 国产精品jizz观看| 国产精品乱码高清在线观看| 步兵精品手机在线观看| 国产成人精品视频网站| 久久精品国产导航| 91精品成人福利在线播放| 999这里只有精品| 国产精品ⅴ无码大片在线看| 99精品视频在线观看re| 国产精品成人99久久久久| 老司机精品视频免费| 日韩人妻不卡一区二区三区| 国产精品无码久久av| 岛国精品在线观看 | 国自产偷精品不卡在线| 精品久久久久久久久久久久久久久| 精品视频在线观看一区二区 | 亚洲国产日韩女人aaaaaa毛片在线 | 日韩美女视频一区| 国产一区精品视频| 国产剧情AV麻豆香蕉精品| 国产精品黄页在线播放免费| 无码人妻精品一二三区免费| 国产一精品一AV一免费孕妇| 国产精品无码一区二区三区毛片| 国产香蕉九九久久精品免费| 四虎精品影院在线观看视频| 国产精品av一区二区三区不卡蜜| 337P日本欧洲亚洲大胆精品| 国产精品无码一区二区三区不卡| 精品久久久久久中文字幕无码| 精品无码专区亚洲| 精品人妻潮喷久久久又裸又黄| 在线观看精品国产福利片87 | 亚洲午夜日韩高清一区| 国产91精品不卡在线| 日韩精品无码免费视频| 日韩视频在线观看一区二区| 日韩电影免费观看| 日韩版码免费福利视频|