vue实现企业微信扫码登录后台管理系统

news2025/2/26 10:03:09

大致流程

  1. 在登录页面构建内嵌式登录二维码(这种方式好处:无需跳转到企业微信域下登录后再返回,提升企业微信登录的流畅性与成功率)
  2. 扫二维码之后,微信那边会跳转到redirect_uri你重定向的地址,后面会拼接code参数,一般重定向地址都是本页面(这里指的是是登录页面)
  3. 在本页面获取url后面拼接的code,用code去请求后台接口
  4. 后台接口服务那边用access_token和code去获取用户的企业微信号
  5. 通过企业微信号查找数据库中是否存在,存在返回用户的基本信息,否则不存在返回提示‘该用户非企业人员’

代码实现

public/index.html 引入js文件:

<script src="https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.7.js"></script>

需要显示登录二维码的页面(这里指登陆页面)构建二维码及相关代码的实现:

显示二维码的容器:

<div id="wx_qrcode" class="wxcodeSty" />

实例化构建相关代码:

// 监听路有变化获取code参数值
watch: {
  "$route.query": {
    handler(newVal, oldVal) {
      console.info(newVal, oldVal);
      this.authCode = this.$route.query["code"];
      this.authCode && this.getStaffInfo(); //获取到code,调用后端接口换取token
    },
    deep: true,
    immediate: true,
  },
},

mounted() {
  this.initCode();
},

methods: {
  // 构造实例
  initCode() {
    new WwLogin({
      id: "wx_qrcode",
      // [appid] 企业微信的CorpID,在企业微信管理端查看
      appid: "xxxxxxxxxxxxxx",
      // [agentid] 授权方的网页应用ID,在具体的网页应用中查看
      agentid: "xxxxxx",
      // [redirect_uri] 重定向地址,需要进行UrlEncode
      redirect_uri: encodeURIComponent("https://xxxx.com/#/login"),
      // [state] 用于保持请求和回调的状态,授权请求后原样带回给企业。
      // 该参数可用于防止csrf攻击(跨站请求伪造攻击),建议企业带上该参数,可设置为简单的随机数加session进行校验
      state: Date.now() + "xxxxxxxxxxxxxxxxx",	//这里可使用上面appid
      // [href] 自定义样式链接,企业可根据实际需求覆盖默认样式
      href: "https://xxxx.com/wxCode/wxQrcode.css",
    });
  },
  
  // 企业微信扫码登录
  getStaffInfo() {
    this.$store
      .dispatch("wxLogin", { authCode: this.authCode })	//wxLogin 是store里写的请求后台接口的actions 实现名字
      .then(() => {
        this.$router.push({ path: "/" });
      })
      .catch((err) => {
      	//这行代码一定要写,不然扫码登录失败后,刷新页面话会重复登录报提示错误
        this.$router.push({ path: "/login" });	
        this.$message({
          showClose: true,
          message: err,
          type: "error",
        });
      });
  },
}

store里扫码登录请求后台接口的实现:

// 引入登录请求接口
import { providerLogin } from '@/api/login/login'

actions: {
 	// 企业微信登录
	wxLogin({ commit }, authCode) {
	  return new Promise((resolve, reject) => {
	    providerLogin(authCode).then(res => {
	      if (res.data.code == 200) {
	      	// 下面几行代码是存储登录成功后的相关信息,与此次无关,相关代码就不展示了
	        commit('SET_TOKEN', res.data.data.token);
	        commit('SET_EXPIRESAT', res.data.data.expiresAt);
	        commit('SET_USERINFO', res.data.data.user);
	        setToken(res.data.data.token, new Date(res.data.data.expiresAt));
	        setExpires(res.data.data.expiresAt, new Date(res.data.data.expiresAt));
	        setUserInfo(res.data.data.user, new Date(res.data.data.expiresAt));
	        resolve();
	      } else {
	        reject(res.data.msg);
	      }
	    }).catch(error => {
	      reject(error);
	    })
	  })
	},
}

请求接口api封装:

// 企业微信登录
export function providerLogin(data) {
	return request({
		url: '/admin/base/providerLogin',
		method: 'post',
		data
	})
}

效果图

weixinCode

注意:效果图也可以自定义,使用登录实例js代码里的href字段,里面写你自定义样式文件服务器的位置路径,为了防止项目打包导致样式文件位置无法获取,位置最好放在在项目中public文件夹下,如下图所:(只支持https协议的资源地址)

自定义样式文件位置

基本上就这些了,该说的也差不多了,还有疑问的小伙伴可以在评论区咨询我,看到留言会回复的~

具体企业微信内部登录相关文档请查看:企业微信扫码授权登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗器械网络安全漏洞自评报告模板

提示&#xff1a;编制医疗器械网络安全漏洞自评报告要点解析 文章目录1. 目的2. 引用文件3. CVSS漏洞等级3.1 概述3.1.1 适用范围说明3.1.2 CNNVD-ID定义3.1.3 编码原则3.1.4 CNNVD-ID语法介绍3.2 指标分析3.2.1 基本指标3.2.1.1可用性指标1)攻击向量2)攻击复杂性3)所需权限4)用…

二、基础平滑、面积折线图与折线堆叠、面积堆叠《手把手教你 ECharts 数据可视化详解》

注&#xff1a;本系列教程需要对应 JavaScript 、html、css 基础&#xff0c;否则将会导致阅读时困难&#xff0c;本教程将会从 ECharts 的官方示例出发&#xff0c;详解每一个示例实现&#xff0c;从中学习 ECharts 。 ECharts 官方示例&#xff1a;https://echarts.apache.o…

蚁剑v4.0流量分析

​ 目录 0x01声明&#xff1a; 0x02简介&#xff1a; 0x03环境搭建&#xff1a; 下载&#xff1a; 初始化项目&#xff1a; 0x04流量分析&#xff1a; 解密&#xff1a; 0x05总结&#xff1a; 0x01声明&#xff1a; 仅供学习参考使用&#xff0c;请勿用作违法用途&…

2023年天津天狮学院专升本专业课如何线上考试考前准备的要求

天津天狮学院2023年高职升本科专业课线上考试要求根据目前疫情防控形势&#xff0c;为保障广大考生身体健康及安全&#xff0c;我校 2023 年高职升本科专业课考试拟采取在线考试形式。为保证此次考试顺利进行&#xff0c;特对报考我校专业课考生提出以下参加考试要求&#xff0…

Ansible自动化运维工具之playbook剧本编写

一.playbook的相关知识 1.1 playbook 的简介 playbook是 一个不同于使用Ansible命令行执行方式的模式&#xff0c;其功能更强大灵活。简单来说&#xff0c;playbook是一个非常简单的配置管理和多主机部署系统&#xff0c;不同于任何已经存在的模式&#xff0c;可作为一个适合…

【MAUI】为 Label、Image 等控件添加点击事件

一、前言 已经习惯了 WPF、WinForm 中“万物皆可点击”的方式。 但是在 MAUI 中却不行了。 在 MAUI 中&#xff0c;点击、双击的效果&#xff0c;是需要通过“手势识别器”来实现。 本篇文章&#xff0c;我们就通过“手势识别器”来为 Label、Image等控件实现点击事件。 相信…

若依微服务版登录流程源码分析1

若依微服务版登录流程涉及到很多模块&#xff0c;本章先从网关讲起 验证码 验证码配置 先来看配置中心的网关配置文件ruoyi-gateway-dev.yml&#xff0c;其中有这么一段 # 安全配置 security:# 验证码captcha:enabled: truetype: math这段配置什么作用呢&#xff0c;就是将…

牛客网刷题【BC7、BC8、BC9、 BC10、 BC11、 BC12】

目录 一 、BC12 字符圣诞树 二、BC7 缩短二进制 三、BC8 十六进制转十进制 四、BC9 printf的返回值 五、BC10 成绩输入输出 六、BC11 学生基本信息输入输出 一 、BC12 字符圣诞树 #include <stdio.h>int main() {char val0;//读入字符scanf("%c",&…

Git入门与进阶 - 总览

Git入门与进阶教程 欢迎加好友一起讨论问题 知识地图&#xff1a;入门Git简介https://blog.csdn.net/lili40342/article/details/128241047Git安装与配置https://blog.csdn.net/lili40342/article/details/128241144Git工作流程https://blog.csdn.net/lili40342/article/detail…

[附源码]计算机毕业设计的个人理财系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

成功解决TypeError: cli.init is not a function for react native

用苹果电脑&#xff08;MacBook air 或者 M1&#xff09;运行 npx react-native init appName时候报错&#xff0c;如下图所示&#xff1a; TypeError: cli.init is not a function at run (/opt/homebrew/lib/node_modules/react-native-cli/index.js:302:7) at createProjec…

有了这款工具,自动化识别验证码再也不是问题

01 环境准备 1、windows 环境下载 exe http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe 双击 exe&#xff0c;一路 next 完成 Tesseract-OCR 安装 2、配置环境变量 PATH 增加 D:\ProgramFiles\Tesseract-OCR 新建环境变量 TESSDATA_PREFIX…

[GO] GORM入门使用

1. GORM 1.1 什么是ORM ORM是object relational mapping就是对象映射关系程序简单的说类似python这种面向对象的程序来说,一切都是对象.为了保证一致性的使用习惯,通过orm将编程语言的对象模型和数据库的关系型模型建立映射关系这样我们直接使用编程语言的对象模型进行数据库…

【cer转jks】

需要两个文件.key,和.cer https://www.myssl.cn/tools/merge-jks-cert.html 选择JKS在线生成 请参照示例&#xff0c;将密钥文件(KEY文件)复制到输入框 请参照示例&#xff0c;将证书文件(CRT/CER文件)复制到输入框 输入别名和密码即可生成 JAVA的application.properties中填写…

主流编程语言的底层实现是什么以及gcc,clang,llvm等编译器的区别

文章目录一、前言二、c和c和c#的区别1、高级语言和低级语言2、c 和 c 和 c#的区别&#xff08;1&#xff09;C语言&#xff08;2&#xff09;C三、各主流语言的底层实现1、python的底层实现2、 java的底层实现3、php的底层实现4、js的底层实现5、node是用什么语言写的6、golang…

[激光原理与应用-45]:《焊接质量检测》-2- 常见焊接缺陷与检验方法

目录 一、概述 二、焊接缺陷的分类 2.1 按产生原因 2.2 按性质分有&#xff1a; 2.3 按在焊缝中的位置分有&#xff1a; 三、焊接缺陷检验的常用方法 一、概述 对于一个金属结构来说&#xff0c;焊接检验就是对所有焊缝或焊接接头而言的&#xff0c;也就是对焊接缺陷的检…

2022年高压快充行业研究报告

第一章 行业概况 高压快充即为快速充电&#xff0c;衡量单位可用充电倍率&#xff08;C&#xff09;表示。充电倍率越大&#xff0c;充电时间越短。依据公式&#xff0c;电池充电的倍率&#xff08;C&#xff09;充电电流&#xff08;mA&#xff09;/电池额定容量&#xff08;…

Python爬虫——Scrapy框架

Scrapy是用python实现的一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。使用Twisted高效异步网络框架来处理网络通信。 Scrapy架构&#xff1a; ScrapyEngine&#xff1a;引擎。负责控制数据流在系统中所有组件中流动&#xff0c;并在相应动作发生时触发事…

西部广播电视杂志《西部广播电视》杂志社《西部广播电视》编辑部2022年第21期目录

特稿&#xff1a;乡村振兴战略下的媒体实践《西部广播电视》投稿&#xff1a;cnqikantg126.com 乡村振兴中广播电视角色定位研究 王菾; 1-4 对农宣传中广播电视传播功能研究 周艺培; 5-711 广播电视助力涉农产业发展 胡朗铭; 8-11 省级乡村频道发展的典型个案研…

答疑1209

1、在fmu v2中回传电压值 在comm task 里面有电压读取的任务&#xff0c;pool 电池的电压状态 这是上层会调用hal层&#xff0c;也就是adc.c里面的read函数 主要是fmu v2 里面没有写adc的驱动函数&#xff0c;也就是driver层&#xff0c;这里需要模仿v5上面的驱动来补充一下&a…