Vue PC端實(shí)現(xiàn)掃碼登錄功能示例代碼
本篇文章給大家?guī)砹岁P(guān)于Vue的相關(guān)知識(shí),其中主要介紹了在PC端實(shí)現(xiàn)掃碼的原理是什么?怎么生成二維碼圖片?怎么用Vue實(shí)現(xiàn)前端掃碼登錄?感興趣的朋友,下面一起來看一下吧,希望對(duì)大家有幫助。
需求描述
目前大多數(shù)PC端應(yīng)用都有配套的移動(dòng)端APP,如微信,淘寶等,通過使用手機(jī)APP上的掃一掃功能去掃頁面二維碼圖片進(jìn)行登錄,使得用戶登錄操作更方便,安全,快捷。
思路解析
PC 掃碼原理?
掃碼登錄功能涉及到網(wǎng)頁端、服務(wù)器和手機(jī)端,三端之間交互大致步驟如下:
- 網(wǎng)頁端展示二維碼,同時(shí)不斷的向服務(wù)端發(fā)送請(qǐng)求詢問該二維碼的狀態(tài);
- 手機(jī)端掃描二維碼,讀取二維碼成功后,跳轉(zhuǎn)至確認(rèn)登錄頁,若用戶確認(rèn)登錄,則服務(wù)器修改二維碼狀態(tài),并返回用戶登錄信息;
- 網(wǎng)頁端收到服務(wù)器端二維碼狀態(tài)改變,則跳轉(zhuǎn)登錄后頁面;
- 若超過一定時(shí)間用戶未操作,網(wǎng)頁端二維碼失效,需要重新刷新生成新的二維碼。
前端功能實(shí)現(xiàn)
如何生成二維碼圖片?
- 二維碼內(nèi)容是一段字符串,可以使用uuid 作為二維碼的唯一標(biāo)識(shí);
- 使用qrcode插件 import QRCode from 'qrcode'; 把uuid變?yōu)槎S碼展示給用戶
import {v4 as uuidv4} from "uuid" import QRCode from "qrcodejs2" let timeStamp = new Date().getTime() // 生成時(shí)間戳,用于后臺(tái)校驗(yàn)有效期 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 = ''
如何控制二維碼的時(shí)效性?
使用前端計(jì)時(shí)器setInterval, 初始化有效時(shí)間effectiveTime, 倒計(jì)時(shí)失效后重新刷新二維碼
export default { name: "qrCode", data() { return { codeStatus: 1, // 1- 未掃碼 2-掃碼通過 3-過期 effectiveTime: 30, // 有效時(shí)間 qrCodeTimer: null // 有效時(shí)長(zhǎng)計(jì)時(shí)器 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)查詢請(qǐng)求,通常使用輪詢的方式
- 定時(shí)輪詢:間隔1s 或特定時(shí)段發(fā)送請(qǐng)求,通過調(diào)用setInterval(), clearInterval()來停止;
- 長(zhǎng)輪詢:前端判斷接收到的返回結(jié)果,若二維碼仍未被掃描,則會(huì)繼續(xù)發(fā)送查詢請(qǐng)求,直至狀態(tài)發(fā)生變化(失效或掃碼成功)Websocket:前端在生成二維碼后,會(huì)與后端建立連接,一旦后端發(fā)現(xiàn)二維碼狀態(tài)變化,可直接通過建立的連接主動(dòng)推送信息給前端。
使用長(zhǎng)輪詢實(shí)現(xiàn):
// 獲取后臺(tái)狀態(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; } } },
到此這篇關(guān)于Vue PC端如何實(shí)現(xiàn)掃碼登錄功能的文章就介紹到這了,更多相關(guān)Vue PC端掃碼登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue如何處理base64格式文件pdf及圖片預(yù)覽功能
這篇文章主要給大家介紹了關(guān)于vue如何處理base64格式文件pdf及圖片預(yù)覽功能的相關(guān)資料,圖片的base64編碼就是可以將一副圖片數(shù)據(jù)編碼成一串字符串,使用該字符串代替圖像地址,需要的朋友可以參考下2024-05-05vue項(xiàng)目使用typescript創(chuàng)建抽象類及其使用方式
這篇文章主要介紹了vue項(xiàng)目使用typescript創(chuàng)建抽象類及其使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03axios中post請(qǐng)求json和application/x-www-form-urlencoded詳解
Axios是專注于網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求的庫,相比于原生的XMLHttpRequest對(duì)象,axios簡(jiǎn)單易用,下面這篇文章主要給大家介紹了關(guān)于axios中post請(qǐng)求json和application/x-www-form-urlencoded的相關(guān)資料,需要的朋友可以參考下2022-10-10關(guān)閉eslint檢查和ts檢查的簡(jiǎn)單步驟記錄
這篇文章主要給大家介紹了關(guān)于關(guān)閉eslint檢查和ts檢查的相關(guān)資料,eslint是一個(gè)JavaScript的校驗(yàn)插件,通常用來校驗(yàn)語法或代碼的書寫風(fēng)格,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02Vue前端如何實(shí)現(xiàn)生成PDF并下載功能詳解
在前端的崗位上經(jīng)常需要實(shí)現(xiàn)個(gè)生成個(gè)并下載的可視化圖表頁P(yáng)DF文件,這篇文章主要給大家介紹了關(guān)于Vue前端如何實(shí)現(xiàn)生成PDF并下載功能的相關(guān)資料,需要的朋友可以參考下2021-10-10Vue3中動(dòng)態(tài)修改樣式與級(jí)聯(lián)樣式優(yōu)先順序圖文詳解
在項(xiàng)目中,我們時(shí)常會(huì)遇到動(dòng)態(tài)的去綁定操作切換不同的CSS樣式,下面這篇文章主要給大家介紹了關(guān)于Vue3中動(dòng)態(tài)修改樣式與級(jí)聯(lián)樣式優(yōu)先順序的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04Vue項(xiàng)目pdf(base64)轉(zhuǎn)圖片遇到的問題及解決方法
這篇文章主要介紹了Vue項(xiàng)目pdf(base64)轉(zhuǎn)圖片遇到的問題及解決方法,需要的朋友可以參考下2018-10-10Vue代理報(bào)錯(cuò)404問題及解決(vue配置proxy)
這篇文章主要介紹了Vue代理報(bào)錯(cuò)404問題及解決(vue配置proxy),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12vue+elementui實(shí)現(xiàn)點(diǎn)擊table中的單元格觸發(fā)事件--彈框
這篇文章主要介紹了vue+elementui實(shí)現(xiàn)點(diǎn)擊table中的單元格觸發(fā)事件--彈框,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07