欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue?PC前端掃碼登錄功能實現(xiàn)

 更新時間:2022年12月29日 10:33:26   作者:前端碎碎念  
最近在做APP客戶端掃描PC端二維碼登錄,于是記錄一下實現(xiàn)過程,下面這篇文章主要給大家介紹了關(guān)于Vue?PC前端掃碼登錄功能實現(xiàn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

需求描述

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

思路解析

PC 掃碼原理?

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

  • 網(wǎng)頁端展示二維碼,同時不斷的向服務(wù)端發(fā)送請求詢問該二維碼的狀態(tài);
  • 手機(jī)端掃描二維碼,讀取二維碼成功后,跳轉(zhuǎn)至確認(rèn)登錄頁,若用戶確認(rèn)登錄,則服務(wù)器修改二維碼狀態(tài),并返回用戶登錄信息;
  • 網(wǎng)頁端收到服務(wù)器端二維碼狀態(tài)改變,則跳轉(zhuǎn)登錄后頁面;
  • 若超過一定時間用戶未操作,網(wǎng)頁端二維碼失效,需要重新刷新生成新的二維碼。

前端功能實現(xiàn)

如何生成二維碼圖片?

  • 二維碼內(nèi)容是一段字符串,可以使用uuid 作為二維碼的唯一標(biāo)識;
  • 使用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 = ''

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

使用前端計時器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()
    }
  },

前端如何獲取服務(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;
         }
       } 
    },

參考資料:

總結(jié)

到此這篇關(guān)于Vue PC前端掃碼登錄功能實現(xiàn)的文章就介紹到這了,更多相關(guān)Vue PC前端掃碼登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue+element項目中過濾輸入框特殊字符小結(jié)

    vue+element項目中過濾輸入框特殊字符小結(jié)

    這篇文章主要介紹了vue+element項目中過濾輸入框特殊字符小結(jié),本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Vue觸發(fā)隱藏input file的方法實例詳解

    Vue觸發(fā)隱藏input file的方法實例詳解

    這篇文章主要介紹了Vue觸發(fā)隱藏input file的方法實例詳解,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • vue使用axios上傳文件(FormData)的方法

    vue使用axios上傳文件(FormData)的方法

    這篇文章主要介紹了vue使用axios上傳文件(FormData)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue的click事件防抖和節(jié)流處理詳解

    Vue的click事件防抖和節(jié)流處理詳解

    今天小編就為大家分享一篇Vue的click事件防抖和節(jié)流處理詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • element中el-select的使用及說明

    element中el-select的使用及說明

    這篇文章主要介紹了element中el-select的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue中裝飾器的使用示例詳解

    Vue中裝飾器的使用示例詳解

    Vue?Property?Decorator提供了一些裝飾器,包括@Prop、@Watch、@Emit、@Inject、@Provide、@Model等等,本文主要來和大家講講它們的使用方法,需要的可以參考一下
    2023-07-07
  • vue通過指令(directives)實現(xiàn)點擊空白處收起下拉框

    vue通過指令(directives)實現(xiàn)點擊空白處收起下拉框

    這篇文章主要介紹了vue通過指令(directives)實現(xiàn)點擊空白處收起下拉框,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 關(guān)于vue狀態(tài)過渡transition不起作用的原因解決

    關(guān)于vue狀態(tài)過渡transition不起作用的原因解決

    這篇文章主要介紹了關(guān)于vue狀態(tài)過渡transition不起作用的原因解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • vue實現(xiàn)excel文件導(dǎo)入導(dǎo)出操作示例

    vue實現(xiàn)excel文件導(dǎo)入導(dǎo)出操作示例

    這篇文章主要為大家介紹了vue實現(xiàn)excel文件的導(dǎo)入導(dǎo)出實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • vue進(jìn)行下載與處理二進(jìn)制流文件的方法詳解

    vue進(jìn)行下載與處理二進(jìn)制流文件的方法詳解

    這篇文章主要為大家詳細(xì)介紹了vue如何實現(xiàn)將后端返回的二進(jìn)制流進(jìn)行處理并實現(xiàn)下載,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12

最新評論