微信登录功能--网站应用

  1. 微信开发平台注册https://open.weixin.qq.com/

  2. 账号中心-填写基本资料(最好是公司注册)

  3. 账号中心-开发者资质认证(充钱,300)

  4. 审核通过之后,管理中心-网站应用-创建网站应用(AppSecret一定一定得记下来,不能放在前端,放在后端)
    下载,填写,盖章,上传
    4步骤完成后会生成应用的appid

  5. 资源中心-网站应用(查看方法)
    在这里插入图片描述

  6. 在umi+react项目中扫码登录方法及踩坑:微信登录二维码内嵌到自己页面

    6.1 内置 js 文件(config.js)
    6.1.1能连网的情况下

export default defineConfig({
 ...,
 headScripts: [`http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js'],
});

6.1.2 如果是内网环境,能连网时,在浏览器打开http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js
复制打开的内容;在 public 目录下新建wxLogin.js,将内容放进wxLogin.js

export default defineConfig({
 ...,
 headScripts: [`./wxLogin.js'],
});

6.2 配置实例化调用方法并在登录页面 useEffect 生命周期调用

var obj = new WxLogin({
 self_redirect:true,
 id:"login_container", //你要放二维码的dom节点div的id
 appid: "", 
 scope: "", 
 redirect_uri: "",
  state: "",
 style: "",
 href: ""
 });

其中 state 动态生成(后端接口返回),可以防止cfrs攻击 什么是 cfrs?
其中 href 可以修改二维码页面的样式 (写好 css 使用 Base64 在线编码)工具

可以使用base64对css样式进行编码,前面拼接"data:text/css;base64,"
示例:"data:text/css;base64,LmltcG93ZXJCb3h7IHRleHQtYWxpZ246bGVmdH0KLmltcG93ZXJCb3ggLnFyY29kZSB7d2lkdGg6IDIwMHB4OyBtYXJnaW46MH0KLmltcG93ZXJCb3ggLnRpdGxlIHtkaXNwbGF5OiBub25lO30KLmltcG93ZXJCb3ggLmluZm8ge3dpZHRoOiAyMDBweDt9Ci5zdGF0dXNfaWNvbiB7ZGlzcGxheTogbm9uZX0KLmltcG93ZXJCb3ggLnN0YXR1cyB7dGV4dC1hbGlnbjogY2VudGVyO30="

6.3 https网站时: iframe 报错 Unsafe attempt to initiate navigation for frame with origin
原因:这个错误通常是因为在安全性方面的限制而产生的,这是浏览器的一种安全特性,用来防止恶意网站通过 iframe 或其他方式导航到其他网站。
解决方案:修改下载下来的 wxLogin.js

!function (e, t) {
 e.WxLogin = function (e) {
 var r = "default";
       !0 === e.self_redirect? r = "true" :!1 === e.self_redirect && (r = "false");
 var n = t.createElement("iframe"),
 i = "https://open.weixin.qq.com/connect/qrconnect?appid=" + e.appid + "&scope=" + e.scope + "&redirect_uri=" + e.redirect_uri + "&state=" + e.state + "&login_type=jssdk&self_redirect=" + r + "&styletype=" + (e.styletype || "") + "&sizetype=" + (e.sizetype || "") + "&bgcolor=" + (e.bgcolor || "") + "&rst=" + (e.rst || "");
 i += e.style? "&style=" + e.style : "",
 i += e.href? "&href=" + e.href : "",
 i += "en" === e.lang? "&lang=en" : "",
 n.src = i,
 n.frameBorder = "0",
 n.allowTransparency = "true",
 n.sandbox = "allow-scripts allow-top-navigation allow-same-origin", // 添加这行代码!!
 n.scrolling = "no",
 n.width = "300px",
 n.height = "400px";
 var s = t.getElementById(e.id);
 s.innerHTML = "",
 s.appendChild(n)
    }
}(window, document);

6.4 hash路由出现 localhost:8000/?code=code&state=state/#/user/login

function fixUrl(url) {
 // 使用正则表达式提取IP、参数和哈希路由
 const matches = url.match(/^([^?#]+)(\?[^#]*)?(#.*)?$/);
 if (!matches) {
 return url; // 如果匹配失败,返回原始 URL
  }
 const [, baseUrl, queryParams, hashRoute] = matches;
 // 重新拼接 URL
 let fixedUrl = baseUrl + '#';
 if (hashRoute) {
 fixedUrl += hashRoute.replace(/^#/, ''); // 去除哈希路由前的 #
  }
 if (queryParams) {
 fixedUrl += '?' + queryParams.replace(/^\?/, ''); // 去除参数前的 ?
  }
 return fixedUrl;
}

function fixHashUrlAndJump() {
 if (location.href.includes(`/?code`)) {
 const currectpath = fixUrl(location.href);
 location.href = currectpath;
 return true;
  } else {
 return false;
  }
}


 useEffect(async () => {
   if (fixHashUrlAndJump()) {
     return;
   }
   const arrays = location?.hash?.split('?');
   const params = new URLSearchParams(arrays[1]);
   const code = params.get('code');
   const state = params.get('state');
   if (!code || !state) {
     return;
   }
},[]);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SMART700西门子触摸屏维修6AV6 648-0CC11-3AX0

西门子工控机触摸屏维修系列型号:PС477,PC677,TD200,TD400,KTP178,TP170A,TP170B,TP177A,TP177B,TP270,TP277,TP27,MP370,MP277,OP27,OP177B等。 触摸屏故障有:上电黑屏, 花屏,暗屏,触摸失灵,按键损坏,电源板,高压板故障,液晶,主板坏等,内容错乱、进不了…

nacos server安装部署傻瓜级教程

下载地址:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.an easy-to-use dynamic service discovery, configuration and service management platfo…

C++ 搜索二叉树

目录 1.二叉搜索树概念 2. 实现二叉搜索树 2.1. 二叉搜索树的插入 2.2查找 2.3删除节点 3.二叉树的应用(KV结构) 1.二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为…

AutoCAD中密集的填充打散后消失的问题

有时候在AutoCAD中,图案填充的填充面积过大或填充太过密集时,将该填充打散,也就是执行Explode时,会发现填充图案消失了。 原因是打散后线条太大,系统就不显示了。可以通过设置:HPMAXLINES 值,来…

奇诡 matlab 小 bug matlab git需要记录的改动太多

似乎是我有一次添加了太多的路径之后的事情。但是不敢说一定是这个导致的: 症状:只要对文本进行任何编辑操作,工作区就会出现"Processing … Cancel"的提示,如果不管的话这个提示不会消失,同时matlab变得越来…

Minimal-Supervised Medical Image Segmentation via Vector Quantization Memory

文章目录 Minimal-Supervised Medical Image Segmentation via Vector Quantization Memory摘要方法实验结果 Minimal-Supervised Medical Image Segmentation via Vector Quantization Memory 摘要 辅助重构分支:该分支通过提供额外的监督并产生学习视觉表示所需…

2025COSP深圳户外展已定档招商工作正式启动!抢占先机,领跑华南市场

想开拓全国最具消费能力的华南市场? 想招到优质的实力经销商? 想快速的提高品牌知名度? 2025-COSP深圳国际户外展会将于2025年2月27-3月1日在深圳福田会展中心盛大开幕! 回顾过去 2024-COSP深圳国际户外展我们取得了较好的成绩…

UEC++ FString做为参数取值时报错error:C4840

问题描述 用来取FString类型的变量时报错: 问题解决 点击错误位置,跳转到代码: void AMyDelegateActor::TwoParamDelegateFunc(int32 param1, FString param2) {UE_LOG(LogTemp, Warning, TEXT("Two Param1:%d Param2:%s"), param…

流量分析(一)

数据库类流量分析 MySQL流量 常规操作,查找flag ctfhub{} 注意要选择字符集 Redis流量 查找ctfhub结果没找到 尝试把其变成十六进制继续进行查找 看到了前半段flag 接着往下看 找到了后半段的flag MongoDB流量 还是一样查找ctfhub 字符串没找到 转成十六进制也没…

【算法】二叉树中的dfs

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、计算布尔二叉树的值二、求根节点到叶节点数字之和三、二叉树剪枝四、验证搜索二叉树五、二叉搜索树中…

U盘文件剪切丢失怎么办?揭秘原因并给出恢复方法

在日常生活和工作中,U盘已成为我们不可或缺的数据存储和传输工具。但有时候,我们在对U盘中的文件进行剪切操作时,会遇到文件丢失的情况。这种突如其来的数据消失往往会让人感到惊慌和困惑。那么,为什么U盘剪切时文件会丢失呢&…

详解GaussDB(DWS)中的行执行引擎

1.前言 GaussDB(DWS)包含三大引擎,一是SQL执行引擎,用来解析用户输入的SQL语句,生成执行计划,供执行引擎来执行;二是执行引擎,其中包含了行执行引擎和列执行引擎,执行引擎…

DataLab-数据分析的Ai辅助工具

添加图片注释,不超过 140 字(可选)DataLab是一个由DataCamp提供的强大在线数据分析平台,它通过AI技术简化了数据处理流程,使得用户无需编程或数据分析的高级技能即可快速获取数据洞察。它支持多种数据源,包…

路由器、交换机和网卡

大家使用VMware安装镜像之后,是不是都会考虑虚拟机的镜像系统怎么连上网的,它的连接方式是什么,它ip是什么? 路由器、交换机和网卡 1.路由器 一般有几个功能,第一个是网关、第二个是扩展有线网络端口、第三个是WiFi功…

显影不干净如何解决?

知识星球(星球名:芯片制造与封测社区,星球号:63559049)里的学员问:光刻工序完成后,晶圆表面有部分图形容易出现显影不净是什么原因?有什么好的解决办法吗? 光刻工序流程 …

SQL常用函数

一、日期相关函数 1、CURDATE() / CURRENT_DATE 返回当前日期 2、CURRENT_TIME()/CURTIME() 返回当前时间 3、CURRENT_TIMESTAMP 返回当前日期时间 4、DATE()从日期或日期时间表达式中提取日期值 5、DATEDIFF(d1,d2)计算日期 d1->d2 之间相隔的天数 6、DATE_FORMAT按表达式…

求职网络安全:这个领域的就业机会正在增长

随着大安全时代的到来,网络安全已经从虚拟空间延伸到现实空间。当今网络战愈演愈烈,网络军备赛即将来临。网络空间领域的战争归根到底还是人才的竞争。面对新形势,建立高效的网络安全人才培养体系对中国信息安全产业发展和保证国家安全来讲都至关重要! 目…

实战中使用 QEMU 进行内网穿透

前言 阅读 https://xz.aliyun.com/t/14052 《使用 QEMU 进行内网穿透?》 https://securelist.com/network-tunneling-with-qemu/111803/ 《Network tunneling with… QEMU?》 我将此项技术应用到实战中,取得不错的效果,但是也遇到很多坑&am…

【机器学习】AI时代的核心驱动力

机器学习:AI时代的核心驱动力 一、引言二、机器学习的基本原理与应用三、机器学习算法概览四、代码实例:线性回归的Python实现 一、引言 在数字化浪潮席卷全球的今天,人工智能(AI)已经不再是科幻小说中的遥远概念&…

优先队列——大小堆—— priority_queue

本人博客主页 本篇博客相关博客 二叉树--讲解 文章目录 目录 文章目录 前言 一、priority_queue是什么? 二、priority_queue的使用 1、相关函数 2、代码使用 3、堆的插入删除 三、模拟实现 1、大框架 2、仿函数 3、向下调整 4、向下调整 总结 前言 在我们学习二叉…