当前位置:首页 > VUE

vue扫码登录代码实现

2026-01-12 07:05:55VUE

Vue 扫码登录实现方案

准备工作

确保项目已安装 Vue 2/3 及相关依赖,需要后端提供生成二维码和验证扫码状态的接口。

生成二维码

使用 qrcode 库生成登录二维码,需调用后端接口获取唯一标识(如 token):

import QRCode from 'qrcode';

// 获取二维码数据
async function generateQR() {
  const res = await axios.get('/api/login/qrcode');
  const { token, url } = res.data;

  QRCode.toCanvas(document.getElementById('qrcode'), url, {
    width: 200,
    margin: 2
  });

  return token;
}

轮询扫码状态

通过定时器检查用户是否已扫码并确认登录:

let pollInterval;

function startPolling(token) {
  pollInterval = setInterval(async () => {
    const res = await axios.post('/api/login/check', { token });
    if (res.data.status === 'confirmed') {
      clearInterval(pollInterval);
      // 登录成功处理
      localStorage.setItem('userToken', res.data.authToken);
    }
  }, 2000); // 每2秒检查一次
}

生命周期管理

在 Vue 组件中控制轮询的启动和清理:

export default {
  data() {
    return {
      qrToken: null
    };
  },
  async mounted() {
    this.qrToken = await generateQR();
    startPolling(this.qrToken);
  },
  beforeUnmount() {
    clearInterval(pollInterval);
  }
};

后端接口要求

  1. 生成二维码接口 /api/login/qrcode
    返回格式:

    {
      "token": "唯一标识符",
      "url": "扫码跳转地址?token=xxx"
    }
  2. 状态检查接口 /api/login/check
    请求参数:

    { "token": "从二维码获取的token" }

    响应状态:

    vue扫码登录代码实现

    // 待扫码
    { "status": "waiting" }
    
    // 已扫码未确认
    { "status": "scanned" }
    
    // 已确认登录
    { "status": "confirmed", "authToken": "JWT令牌" }

优化建议

  • 添加二维码过期处理(后端需返回过期时间)
  • 在二维码旁显示扫码状态提示(如文字或图标变化)
  • 使用 WebSocket 替代轮询(适用于高实时性场景)

完整组件示例

<template>
  <div>
    <canvas id="qrcode"></canvas>
    <p>{{ statusText }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      statusText: '请扫码登录',
      pollInterval: null
    };
  },
  methods: {
    async checkStatus(token) {
      // 实现状态检查逻辑
    }
  },
  async mounted() {
    // 实现初始化逻辑
  },
  beforeUnmount() {
    clearInterval(this.pollInterval);
  }
};
</script>

标签: 代码vue
分享给朋友:

相关文章

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout() {…

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…

vue实现checkbox

vue实现checkbox

Vue 实现 Checkbox 在 Vue 中实现 Checkbox 可以通过原生 HTML 的 <input type="checkbox"> 或使用 Vue 的 v-model 指令绑…

vue实现盒子平移

vue实现盒子平移

实现盒子平移的方法 在Vue中实现盒子平移可以通过CSS的transform属性结合Vue的动态绑定来完成。以下是几种常见的实现方式: 使用内联样式绑定 通过Vue的v-bind:style或简写:…