第三方登录-pc支付宝扫码登录流程

最近有个奇葩的需求,用户要支持支付宝扫码登录。这个需求很少见,那就做一下,看起来有点难,其实很简单。
先看结果
在这里插入图片描述

流程梳理

在这里插入图片描述

核心代码

获取支付宝扫码页面的url

	// 获取支付宝扫码登录页面的urlasync function getZFBLoginUrl() {try {let redirectUrl = 'https://yx.hubeidaily.net/zfblogin'; let res: any = await getAuthAlipayPcUrl({ redirectUrl });if (res?.code !== 200) return;let url = res.data;window.open(url);} catch (error) {}}<div onClick={() => getZFBLoginUrl()}>支付宝扫码登录</div>

在指定页面检测是否绑定账号

Zfblogin.tsx 空白页面

let urlState = useGetUrlParams('state');
let code = useGetUrlParams('auth_code');
const [token, setToken] = useAtom(tokenStore);
const setUserInfo = useSetAtom(userInfoStore);
const navigate = useNavigate();useEffect(() => {if (urlState) isBinding(code, urlState);
}, []);// 判断是否绑定
async function isBinding(code: string, state: string) {try {let params = { auth_code: code, state };let res: any = await getAuthAlipayAuthorize(params);console.log('判断是否绑定-res: ', res);if (res.code === 200) {toast('登录成功', 'success');setUserInfo(res.data.user);setToken(res.data.token);setTimeout(() => {handleLoginSuc();}, 1000);} else if (res.code === 10000) {// 未绑定navigate('/accountBind?type=zfb&state=' + state);} } catch (error) { }
}

用已有账号绑定支付宝账号

AccountBind.tsx 账号绑定页面,手机号验证码绑定

  1. 如果有账号,直接绑定,并登录
  2. 如果没有账号,去注册
    let state = useGetUrlParams(‘state’); // state支付宝绑定时需要,支付宝返回来的
 // 提交const submit = async () => {let params = {...allData,state: state,};try {setLoading(true);let res: any = await postAuthAlipayPcPersonBind(params);console.log('支付博绑定-res: ', res);if (res.code === 200) {toast('绑定成功', 'success');setUserInfo(res.data.user);setToken(res.data.token);setTimeout(() => {handleLoginSuc();}, 1000);} else if (res.code === 10001) {// 未注册toast('你还未注册,请先注册', 'warnning');setTimeout(() => {showLoginCpn();}, 1000);}} finally {setLoading(false);}};

未注册,则注册并登录

register.tsx 注册页面,注册绑定登录;区分普通登录和支付宝登录

  let state = useGetUrlParams('state'); // state 微信、支付宝绑定时需要// 提交const submit = async () => {try {let params = await formRef?.current?.validateFieldsReturnFormatValue();let res: any;if (!state) {// 普通注册res = await postAuthRegisterPerson(params);} else {// 支付宝注册params.state = state;res = await postAuthAlipayPcPersonRegister(params);}if (res.code === 200){}  // 成功后再执行相应逻辑} catch (error) {setLoading(false);console.log('error: ', error);}};

至此,大功告成;
其实,这里边核心东西不难,前端就是调调api,但是交互和测试会比较麻烦,要考虑注册、登录、绑定等一系列的交互。
在这里插入图片描述

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

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

相关文章

机器学习之朴素贝叶斯(Naive Bayes)附代码

概念 朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的机器学习算法,它被广泛用于分类和文本分析任务。该算法的"朴素"体现在对特征之间的条件独立性的假设,即给定类别,特征之间是相互独立的。尽管这个假设在实际情况中并不总是成立,但这种简化有助于降低计算复…

动态规划--三步问题

本题题目链接备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/three-steps-problem-lcci/ 个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 动态规划&…

MCU平台下确定栈空间大小的方法

本文介绍MCU平台下确定栈空间大小的方法。 通常使用IDE开发MCU程序在生成Image文件时&#xff0c;Image文件被划分为代码区&#xff0c;数据区&#xff0c;BSS区&#xff0c;堆区&#xff0c;栈区。其中&#xff0c;代码区&#xff0c;数据区&#xff0c;BSS区空间大小由编译器…

Scrum敏捷转型培训公司有哪些?

对于企业而言&#xff0c;敏捷转型是提升竞争力、适应市场变化的重要手段。为了实现这一目标&#xff0c;许多知名的培训公司提供了专业的敏捷培训课程和认证。其中&#xff0c;Leangoo领歌以其全面的敏捷研发管理解决方案和多种认证课程而备受认可。 1、Leangoo领歌&#xff…

Centos 8.5 Oracle12c安装

由于多次安装踩坑&#xff0c;所以本次写了一份12c安装的完整版。可以直接使用。 一、安装数据库基本信息 名称 值 主机名 database 操作系统 CentOS Linux release 8.5.2111 Oracle用户名/密码 oracle Oracle 版本 12c Enterprise Edition Release 12.2.0.1.0 oracle…

Java 基础学习(十五)集合排序、Lambda和Stream

1 集合排序 1.1 集合排序API 1.1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列&#xff0c;以使得集合中的元素按照预定义的顺序呈现。 在集合排序中&#xff0c;通常需要定义一个比较规则&#xff0c;这个比较规则用于决定集合中的元素在排序后…

Python 使用 python-dateutil 获取间隔时间

当前环境&#xff1a;Win10 Python3.7 python-dateutil2.8.2 from datetime import datetime # 获取当前日期 current_date datetime.now()from dateutil.relativedelta import relativedelta# 计算下一年的日期 next_year_date current_date relativedelta(years1) # 计…

【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Python学习6

大家好&#xff0c;这里是七七&#xff0c;今天来介绍的是LSTM模型实现代码。 总代码 import pandas as pd import numpy as np from keras.models import Sequential from keras.layers import LSTM,Dense from sklearn.preprocessing import MinMaxScaler from sklearn.met…

【LeetCode刷题笔记(11-1)】【Python】【和为 K 的子数组】【前缀和】【中等】

文章目录 引言和为 K 的子数组题目描述提示 解决方案1&#xff1a;【暴力枚举】解决方案2&#xff1a;【前缀和】结束语 和为 K 的子数组 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例&#xff0c;但…

SQL进阶理论篇(十七):数据库主从同步的原理

文章目录 简介为什么需要主从同步主从同步的原理总结参考文献 简介 以MySQL数据库为例&#xff0c;在实际生产中&#xff0c;我们会如何对MySQL数据库进行性能优化呢&#xff1f; 比如说配合上Redis做缓存。Redis是一种高性能的内存数据库&#xff0c;而MySQL是一种基于磁盘文…

docker-compose安装Rocketmq总结,以及如何更换mq端口

默认你已经装好了docker哈 安装docker-compose sudo curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-composechmod x /usr/local/bin/docker-composedocker-compose --version成功打印…

LLVM学习笔记(65)

4.4.3.4. X86FrameLowering子对象 X86Subtarget成员FrameLowering的类型是X86FrameLowering&#xff0c;它派生自TargetFrameLowering。它记录了目标机器上栈布局的信息。比如栈的生长方向&#xff0c;每个函数入口已知的栈对齐边界&#xff0c;以及局部变量区相对函数入口处栈…

截断霍夫曼编码

截断霍夫曼编码是一种数据压缩技术&#xff0c;它基于霍夫曼编码的原理&#xff0c;通过截断霍夫曼树&#xff0c;减少编码中的冗余信息&#xff0c;实现更高效的数据压缩。在本文中&#xff0c;我们将详细探讨截断霍夫曼编码的原理、应用及其优势。 一、霍夫曼编码简介 霍夫曼…

Kubernetes集群内创建具有kubectl命令行工具的容器

Kubernetes 集群中创建一个包含 kubectl 命令的 Pod 通常用于管理和调试集群本身。这种 Pod 通常被称为“调试 Pod”或“管理 Pod”&#xff0c;它们的主要作用是允许从集群内部执行 Kubernetes 操作和管理任务。这可以在多种情况下非常有用&#xff1a; 集群管理和维护 内部…

12.21 汇编点亮STM32MP157小灯

.text .global _start _start: 时钟使能pb6 pf6 pe9LDR r0,0x50000A28LDR r1,[r0]ORR r1,r1,#(0x1<<4)ORR r1,r1,#(0x1<<5)ORR r1,r1,#(0x1<<1)STR r1,[r0]配置GPIO模式LDR r0,0x50006000LDR r1,[r0]BIC r1,r1,#(0x2<<20)ORR r1,r1,#(0x1<<20)B…

kubernetes集群应用 service进阶

kubernetes集群应用 Service进阶 一、场景 使用kubernetes集群运行工作负载时&#xff0c;由于Pod经常处于用后即焚状态&#xff0c;Pod对应的IP地址也会经常变化&#xff0c;因此我们不能直接访问Pod&#xff0c;可以通过Service对应的端点列表&#xff08;Endpoints&#x…

PaddleOCR Docker 容器快捷调用,快捷调用OCR API

文章目录 搞环境命令行测试Python调用测试转fastapi服务打包成镜像服务PaddleOCR 服务端模型总结&#xff0c;直接启动OCR服务 paddleOCR迎来大更新&#xff0c;搞一把新的api接口&#xff0c;直接用起来。 搞环境 搞容器&#xff1a; FROM nvidia/cuda:11.8.0-cudnn8-devel…

openlayers 截图

openlayers 截图 OK&#xff0c;我承认&#xff0c;这篇博文是一个水文。 最新做了一个功能&#xff0c;就是 openlayers 展示二维 GIS 数据后&#xff0c;可以把当前的视角导出图片。 直接写代码吧&#xff0c;没啥好说的&#xff1a; // 截图toImg() {if (this.map) {let ca…

【笔记】网络流算法模板

文章目录 EK求最大流题目描述输入格式输出格式数据范围 算法步骤算法时间复杂度 O ( n m 2 ) O(nm^2) O(nm2) AC CodeDinic/ISAP求最大流题目描述输入格式输出格式数据范围 算法步骤算法时间复杂度 O ( n 2 m ) O(n^2m) O(n2m) AC CodeDinic/ISAP求最小割EK求费用流题目描述输…