当前位置: 首页 > news >正文

react + antDesignPro 企业微信扫码登录

效果

实现步骤

1、项目中document.ejs文件引入企微js链接

注意:技术栈是使用的react + antDesignPro,不同的技术栈有不同的入口文件(如vue在html文件引入)

<script src="https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.7.js"></script>
2、在登录页面放置二维码容器
<div id="ww_login"></div>
3、在登录页面生成二维码

注意:目前项目需求为进入页面就展示二维码,所以在React的useEffect中进行生成的,如果有其它交互可通过其它交互进行动态生成二维码

useEffect(() => {new WwLogin({id: 'ww_login',appid: 'wwa2d9444d52111111',agentid: '1000000',redirect_uri: encodeURIComponent('http://oa.zzmjart.com/user/login'),state: Date.now() + '1000000',});
}, []);
4、扫码完成后监听路由,处理登录逻辑

注意:目前跟后端约定交互为扫完二维码后跳转项目登录页面,登录页面路由上会拼接code,前端监听路由query里面是否有code,如有code拿到code去调后端接口换取token,后端返回token后进行储存token/跳转页面

import { history } from 'umi';useEffect(() => {if (history?.location?.query?.code) {qwLogin(history?.location?.query);}
}, [history]);const qwLogin = async (values) => {try {const msg = await cpLogin({ code: values.code });if (msg.code === 200) {message.success('登录成功!');localStorage.setItem('token', msg.data.token);const redirect = localStorage.getItem('redirect');if (redirect) {localStorage.setItem('redirect', '');location.href = location.origin + decodeURIComponent(redirect);} else {location.pathname = '/';}return;}console.log(msg); // 如果失败去设置用户错误信息} catch (error) {message.error('登录失败,请重试!');}
};

注:本人前端小白 ,如有不对的地方还请多多指教

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 之反射机制详解
  • MySQL中的LIMIT与ORDER BY关键字详解
  • go/函数
  • 从IPC摄像机读取视频帧解码并转化为YUV数据到转化为Bitmap
  • DeepSeek 2.5本地部署的实战教程
  • 7--SpringBoot-后端开发、原理详解(面试高频提问点)
  • Web后端开发技术:RESTful 架构详解
  • 如何在GitHub上Clone项目:一步步指南
  • js 深入理解类-class
  • 存储系统概述
  • 移动端如何实现智能语音交互
  • Java免税商品优选商城:Spring Boot实战
  • 【在Linux世界中追寻伟大的One Piece】IP分片和组装的具体过程
  • Linux:syslog文件删掉 不能自动创建
  • Cpp类和对象(中续)(5)
  • Google 是如何开发 Web 框架的
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 07.Android之多媒体问题
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • learning koa2.x
  • Lucene解析 - 基本概念
  • Puppeteer:浏览器控制器
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Vue ES6 Jade Scss Webpack Gulp
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 简析gRPC client 连接管理
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 漂亮刷新控件-iOS
  • 思维导图—你不知道的JavaScript中卷
  • 因为阿里,他们成了“杭漂”
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 阿里云重庆大学大数据训练营落地分享
  • 正则表达式-基础知识Review
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $nextTick的使用场景介绍
  • $NOIp2018$劝退记
  • (13)Hive调优——动态分区导致的小文件问题
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (LeetCode 49)Anagrams
  • (十二)Flink Table API
  • (四)linux文件内容查看
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)Scala的“=”符号简介
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET 给NuGet包添加Readme
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件