react + antDesignPro 企业微信扫码登录

news/2024/9/19 8:12:06 标签: react.js, 企业微信, 前端

效果

实现步骤

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('登录失败,请重试!');
    }
};

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


http://www.niftyadmin.cn/n/5665238.html

相关文章

11 - TCPClient实验

在上一个章节的UDP通信测试中&#xff0c;尽管通信的实现过程相对简洁&#xff0c;但出现了通信数据丢包的问题。因此&#xff0c;本章节将基于之前建立的WIFI网络连接&#xff0c;构建一个基础的TCPClient连接机制。我们利用网络调试助手工具来发送数据&#xff0c;测试网络通…

使用Maven创建一个Java项目并在repository中使用

JDK环境&#xff1a;1.8.0_371 Maven环境 &#xff1a;Apache Maven 3.6.3 配置完成jdk和mvn后&#xff0c;进入到指定文件夹下执行如下语句&#xff1a; mvn archetype:generate -DgroupIdtop.chengrongyu -DartifactIdCyberSpace -DarchetypeArtifactIdmaven-archetype-quic…

接口幂等性和并发安全的区别?

目录标题 幂等性并发安全总结 接口幂等性和并发安全是两个不同的概念&#xff0c;虽然它们在设计API时都很重要&#xff0c;但侧重点不同。 幂等性 定义&#xff1a;幂等性指的是无论对接口进行多少次相同的操作&#xff0c;结果都是一致的。例如&#xff0c;HTTP的PUT和DELE…

ts类型谓词和never

ts谓词 有时会写一些用于判断变量类型的工具函数&#xff0c;然后根据函数返回的布尔值来做逻辑处理。比如下面的代码例子&#xff1a; function isArrayBoolean(value: unknown): boolean {return Array.isArray(value); }if (isArrayBoolean(value)) {// TypeScript 仍然认…

暑假考研集训营游记

文章目录 摘要&#xff1a;1.对各大辅导机构考研封闭集训营的一些个人看法&#xff1a;2.对于考研原因一些感想&#xff1a;结语 摘要&#xff1a; Ashy在暑假的时候参加了所在辅导班的为期一个月的考研封闭集训营&#xff0c;有了一些全新的感悟&#xff0c;略作记录。 1.对…

Vue 3 是 Vue.js 的下一代版本,它在许多方面都带来了显著的改进和变化,旨在提高开发效率和用户体验

性能提升&#xff1a; Vue 3 引入了一个新的编译系统&#xff08;Proxy-based&#xff09;和响应式系统&#xff08;Proxy&#xff09;&#xff0c;这极大地提高了性能。Proxy 相比 Vue 2 中的 Object.defineProperty&#xff0c;在处理嵌套对象和数组时更加高效和灵活。静态提…

python多线程程序设计 之一

python多线程程序设计 之一 全局解释器锁线程APIsthreading.active_count()threading.current_thread()threading.excepthook(args, /)threading.get_native_id()threading.main_thread()threading.stack_size([size]) 线程对象成员函数构造器start/runjoin 线程子类 实列代码 …

CentOS 中配置 OpenJDK以及多版本管理

以下是在 CentOS 中配置 OpenJDK 的步骤&#xff1a; 一、安装 OpenJDK 使用以下命令检查系统中是否已经安装了 Java&#xff1a; java -version如果已安装&#xff0c;会显示 Java 版本信息。如果未安装&#xff0c;则继续下一步。 使用 yum 安装 OpenJDK&#xff1a; yum ins…