uniapp-小程序登录授权框

news2024/11/18 3:48:34

微信官方文档

不弹出授权框原因

因为版本问题,目前的最新的版本是不支持 wx.getUserInfo 去主动弹出授权框 只能引导用户去点击 butten 去授权

解决方法

        我的思路是参考了其他的微信微信小程序, 就是跳转到'我的'页面的时候 在钩子函数内去触发一个封装的模态框,状态由false 和true 去决定显示隐藏

        然后在模态框内去放置一个按钮 通过按钮去触发事件 去调用微信支持的接口wx.getUserProfile

模态框组件的代码:

<template>
	<view>
		<view class="room-info-mask" v-if="myShow" @click="hide"></view>
		<view class="room-info animated" v-if="myShow" :class="{slideInUp: wrapper,slideOutDown: !wrapper}">
			<view class="title-wrapper">
				<view class="title">xxx申请</view>
				<view class="iconfont close" @click="hide"></view>
			</view>
			<view class="sub-title">登录xxxxx</view>
			<view class="des">登录以开始探索更多精彩内容</view>
			<button class="btn" open-type="getPhoneNumber" @getphonenumber="getPhone">授权手机号并登录</button>
			<view class="cancel" @click="hide">取消</view>
		</view>
	</view>
</template>

<script>
import { weixinLogin } from "@/api/login/login.js"
const app = getApp();
export default {
	props: {
		show: {
			type: Boolean,
			default: false
		}
	},
	data () {
		return {
			mask: false,
			wrapper: false,
			myShow: false,
		};
	},
	mounted() {
		this.myShow = this.show;
		this.wrapper = true;
	},
	watch: {
		show(isShow) {
			if (isShow) {
				this.myShow = isShow;
				this.wrapper = true;
			} else {
				this.wrapper = false;
				setTimeout(() => {
					this.myShow = false;
				}, 400);
			}
		},
	},
	methods: {
		hide() {
			this.wrapper = false;
			setTimeout(() => {
				this.$emit('handleHide', {
					show: false
				});
			}, 400);
		},
		// 获取手机号
		getPhone (e) {
			const getPhoneCode = e.detail.code
			uni.login({
				provider: 'weixin',
				success: (res) => {
					console.log('res-login', res);
					//获取到code
					this.code = res.code;
					// console.log('code', res.code);
					//请求登录接口
					if (res.errMsg == 'login:ok') {
						let data = {
							grant_type: 'urn:ietf:params:oauth:grant-type:wechat',
							scope: 'message.write openid',
							code: this.code,
							role: 'user',
							getPhoneCode: getPhoneCode
						}
						this.wechatLogin(data)
					}
				},
			});
		},
		// 微信登录
		async wechatLogin(data){
			const res = await weixinLogin(data)
			console.log(res, res.data.access_token)
			// this.$store.commit("userInfo/setToken", res.data.access_token)
			if (res.statusCode == 200 && res.data.code !== 0) {
				uni.showToast({
					title: '登录成功',
					icon: 'success',
					mask: true,
				});
				//获取到token 存入缓存。通过有无token来判断是否登录
				// console.log('登录接口',res)
				uni.setStorageSync('token', res.data.access_token)
				// this.myProfile()  //用户信息接口
				// this.getHistoryList()   //足迹接口
				this.myShow = false;
				// 刷新当前页面
				uni.reLaunch({ url: '/pages/mine/mine' });
			} else {
				uni.showToast({
					title: '登录失败',
					icon: 'warn',
					mask: true,
				});
			}
		},
	},
	components: {
	},
};
</script>

<style lang="scss" scoped>
.room-info-mask {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	top: 0;
	width: 100%;
	height: 100%;
	z-index: 99;
	background: rgba(28,28,28,0.2);
}
.room-info {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 100;
	background: #fff;
	max-height: 90vh;
	padding: 8rpx 30rpx 50rpx;
	box-sizing: border-box;
	border-radius: 20rpx 20rpx 0rpx 0rpx;
	overflow: scroll;
	.title-wrapper {
		height: 44rpx;
		display: flex;
		align-items: center;
		position: relative;
		padding-top: 38rpx;
		padding-bottom: 20rpx;
		.title {
			font-size: 24rpx;
			font-family: PingFang SC;
			font-weight: 500;
			color: #999;
		}
		.close {
			position: absolute;
			right: 0rpx;
			top: 30rpx;
			&:before {
				font-size: 30rpx;
				color: #000;
				content: '\eaf2';
			}
		}
	}
	.sub-title {
		font-size: 40rpx;
		font-family: PingFang SC;
		font-weight: 400;
		line-height: 36rpx;
		color: #000;
		padding-top: 30rpx;
	}
	.des {
		padding-top: 10rpx;
		font-size: 28rpx;
		font-family: PingFang SC;
		font-weight: 400;
		line-height: 36rpx;
		color: #333;
	}
	.btn {
		margin: 100rpx 45rpx 20rpx;
		width: 600rpx;
		height: 80rpx;
		border-radius: 50rpx;
		background-color: #26c791;
		color: #fff;
		line-height: 80rpx;
		text-align: center;
	}
	.cancel {
		text-align: center;
		color: #999;
		
	}
}
</style>

实现的效果图

封装成组件是因为  有些页面是需要登录才能访问的 所以在点击跳转之前 可以通过判断本地是否有token 去决定能否跳转    如果没有登录 就把状态改为 true  然后就 打开模态框提示用户登录

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

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

相关文章

STM32-HAL库07-软件SPI驱动0.96寸OLED

STM32-HAL库07-软件SPI驱动0.96寸OLED 一、所用材料&#xff1a; STM32VGT6自制控制板 STM32CUBEMX&#xff08;HAL库软件&#xff09; MDK5 二、所学内容&#xff1a; 通过HAL库配置四个GPIO输出口&#xff0c;对其进行软件模拟SPI发送规则&#xff0c;进而驱动OLED进行数…

VisualStudio Code 支持C++11插件配置

问题 Visual Studio Code中的插件: Code Runner 支持运行C、C、Java、JS、PHP、Python等多种语言。 但是它不支持C11特性的一些使用&#xff0c;比如类似错误&#xff1a; binarySearch.cpp:26:17: error: non-aggregate type ‘vector’ cannot be initialized with an ini…

C++(day4)

思维导图 封装Mystring #include <iostream> #include<cstring>using namespace std;class Mystring{ public://无参构造函数Mystring():size(10){strnew char[size];strcpy(str,"");cout<<"无参构造函数"<<endl;}//有参构造函数…

前端内存泄漏和溢出的情况以及解决办法

写在前面&#xff1a; 在平时写代码时&#xff0c;内存泄漏的情况会时有发生&#xff0c;虽然js有内存回收机制&#xff0c;但在平时编程中还是需要注意避免内存泄漏的情况&#xff1b;前几天做移动端时遇到一个内存泄漏造成移动端页面卡顿的问题&#xff0c;所以想总结下前端…

GO语言网络编程(并发编程)Channel

GO语言网络编程&#xff08;并发编程&#xff09;Channel 1、Channel 1.1.1 Channel 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换&#xff0c;但是共享内存在不同的goroutine中容易发生竞态…

Linux Debian12使用git将本地项目打标签、创建分支和分支合并到master再上传到码云(gitee)远程仓库

一、git创建分支并克隆指定分支到本地 gitee官网&#xff1a;https://gitee.com/ 登录上gitee账号,我这用test仓库作测试。新建分支名称为develop&#xff0c;分支起点选择master&#xff0c;创建即可&#xff0c;如下图所示&#xff1a; 使用git管理代码版本时&#xff0…

SpringBoot 中的事务管理讲解

Spring Boot 中的事务管理 在实际的开发中&#xff0c;事务是非常重要的一个概念。在 Spring Boot 中&#xff0c;我们可以使用事务管理器来管理事务。事务管理器可以确保一系列操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而保证数据的一致性和完整性。在本文中&…

音频驱动嘴型的视频数字人虚拟主播工具motionface replay使用教程

音频驱动嘴型的视频数字人虚拟主播工具motionface replay使用教程 1&#xff1a;系统要求 软件运行支持32位/64位window 10/11系统&#xff0c;内存最低要求> 8Gb.无其他硬性要求。 1&#xff1a;下载安装 打开百度网盘链接下载&#xff1a; 链接&#xff1a;百度网盘 请输入…

unityhub登录不上,登录界面刷新不出来, 或检测不到Unity

如果是登录界面白屏的话 或 检测不到Unity 可以尝试 1.关闭hub&#xff08;右下角也要退出&#xff0c;找不到的可以直接任务管理器退出&#xff09; 2.删除 %UserProfile%\AppData\Roaming 里面的 \UnityHub\Cache和\Unity\Caches 文件夹 C:\Users\Administrator\AppData\Ro…

Linkstech多核并行仿真丨光伏发电系统模型及IEEE 39 bus模型多核并行实测

新能源场站和区域电网作为复杂且具有动态特性的大规模电力系统&#xff0c;需要实时仿真测试来验证其性能、稳定性和响应能力。在这种背景下&#xff0c;多核并行仿真运算显得尤为重要。多核并行仿真能够同时处理电力系统的复杂模型&#xff0c;加速仿真过程&#xff0c;实现接…

C#自定义控件组件实现Chart图表(多Y轴,选择图例加粗,选择放大,缩放,点击查看信息等功能)

先看看ECharts的效果 C# 工具箱里的Chart控件就不演示了,很多效果没办法做出来,做出来效果也很不理想。所以,需要自己去手动实现工具箱里的Chart没办法实现的效果; 先看看实现后的效果 绑定数据 点击图表 点击右侧图例加粗 选择放大 右键 点击缩小,恢复

Docker Desktop使用宿主机Windows的配置文件持久化存储数据

《微软官网Windows 上的 Docker 引擎帮助文档》 以Nginx为例 拉取Nginx镜像 docker pull nginx:1.23.1先启动Nginx&#xff0c;然后把Nginx的配置文件复制到Windows docker run --namenginx-1.23.1 -d -p 80:80 nginx:1.23.1把Nginx的配置文件复制到Windows 注意&#xff1…

【算法训练-数组 四】【合并】:合并两个有序数组

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【数组合并】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

【深度学习】分类损失函数解析

【深度学习】分类相关的损失解析 文章目录 【深度学习】分类相关的损失解析1. 介绍2. 解析3. 代码示例 1. 介绍 在分类任务中&#xff0c;我们通常使用各种损失函数来衡量模型输出与真实标签之间的差异。有时候搞不清楚用什么&#xff0c;下面是几种常见的分类相关损失函数及其…

计算机网络TCP篇之流量控制

计算机网络TCP篇之流量控制 今天谈一谈我对于tcp流量控制的看法 在网络拓扑中如果发送方节点的发送速率大于接受方节点的接受速率&#xff0c;数据会不断在接受方的缓冲区累积&#xff0c;直到接受方的缓冲区满的时候&#xff0c;发送方继续发送数据&#xff0c;这时候接受方无…

redisson使用过程常见问题汇总

文章目录 常见报错1. 配置方式使用错误2. 版本差异报错3. 配置文件中配置了密码或者配置错误4. 字符集和序列化方式配置问题5. Redisson的序列化问题6. 连接池问题&#xff1a;7. Redisson的高可用性问题&#xff1a;8. Redisson的并发问题9. Redisson的性能问题 2. 参考文档 常…

springboot第36集:kafka,JSAPI支付,nginx,微服务Feign与flutter安卓App开发2

去思考自己的项目有哪些让你觉得不好的地方&#xff0c;然后去解决它&#xff0c;而非学习了一堆原理&#xff0c;展示技术能力比展示技术知识更有说服力 其实边解决问题边记录&#xff0c;是一个好习惯&#xff0c;不仅可以在解决问题的时候&#xff0c;方便回顾和查找&#x…

使用webpack-bundle-analyzer分析uni-app 的微信小程序包大小(HbuilderX运行)

1、找到vue.config.js 文件。如果找不到&#xff0c;则在项目根目录下&#xff08;跟pages.json同一个目录下&#xff09;创建一个JS文件&#xff0c;命名为vue.config.js 2、安装webpack-bundle-analyzer&#xff0c;官方网站&#xff1a;https://github.com/webpack-contrib…

中国汽车工业协会软件分会中国汽车基础软件生态标委会第三届二次会议在天津顺利召开

2023年8月30日&#xff0c;中国汽车工业协会软件分会中国汽车基础软件生态标委会&#xff08;AUTOSEMO&#xff09;第三届二次会议在天津召开。出席本次会议的有AUTOSEMO专业指导主任许艳华、中国汽车工业协会软件分会理事长、AUTOSEMO轮值主席、中汽创智CEO李丰军、经纬恒润协…

ChatGPT AIGC总结Excel中Vlookup,lookup,xlookup的区别

在Excel的使用过程中,查找函数是非常重要的,如Vlookup,lookup,Xlookup,index+match等都是使用的最多的函数,我们让ChatGPT,AIGC用思维导图来总结一下,各查找函数的用法与区别。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle…