vue实现企业微信扫码登录后台管理系统
创始人
2024-04-20 11:10:46
0

大致流程

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

代码实现

public/index.html 引入js文件:


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

显示二维码的容器:

实例化构建相关代码:

// 监听路有变化获取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] 重定向地址,需要进行UrlEncoderedirect_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协议的资源地址)

自定义样式文件位置

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

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

相关内容

热门资讯

【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
【前端】‘??‘与‘||‘有什... 0 问题 经常写const data = res.data.a ?? ''或者const d...
ChatGPT 怎么用最新详细... ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...