微信小程序uni-app+vue3实现手机号一键登录方法

微信小程序uni-app+vue3实现手机号一键登录方法

网上的教程都挺乱,写得都不怎么全,我重新实现了一下,把具体的方法都分享出来。

uni-app/微信小程序官方API

1. uni.login

uni-app提供的统一登录接口,用于获取登录凭证(code)。

语法:

uni.login({provider: 'weixin', // 登录服务提供商,微信小程序固定为'weixin'success: (res) => {// res.code: 登录凭证,有效期5分钟// res.errMsg: 错误信息,成功为'login:ok'},fail: (err) => {// 登录失败回调// err.errMsg: 错误信息},complete: () => {// 接口调用结束的回调(调用成功、失败都会执行)}
})**注意事项:**
- code只能使用一次,使用后失效
- code有效期为5分钟
- 需要在真机或开发者工具中调试
- 建议封装为Promise使用**Promise封装示例:**
````typescript
const login = (): Promise<string> => {return new Promise((resolve, reject) => {uni.login({provider: 'weixin',success: (res) => {if (res.errMsg === 'login:ok') {resolve(res.code)} else {reject(new Error(res.errMsg))}},fail: (err) => {reject(err)}})})
}

2. 获取手机号相关

<template><!-- 登录按钮 --><button class="login-button":loading="loading":disabled="loading"open-type="getPhoneNumber" @getphonenumber="handleGetPhoneNumber">{{ loading ? '登录中...' : '手机号一键登录' }}</button>
</template>
  • open-type="getPhoneNumber": 按钮的开放能力属性
  • @getphonenumber: 获取手机号回调事件
  • 回调参数 e.detail.code: 用于换取手机号的code
  • 错误信息 e.errMsg: 包含 ‘getPhoneNumber:fail user deny’ 等状态

3. 存储相关(可以调用自己相关的状态管理)

// 存储API
uni.setStorageSync('key', value) // 同步存储数据
uni.getStorageSync('key')        // 同步获取数据
uni.removeStorageSync('key')     // 同步删除数据

4. 界面交互

// 提示框
uni.showToast({title: '提示内容',icon: 'none' // 'success' | 'loading' | 'error' | 'none'
})// 加载提示
uni.showLoading({title: '加载中',mask: true // 是否显示透明蒙层
})
uni.hideLoading()

完整登录流程示例

const handleGetPhoneNumber = async (e: any) => {try {// 1. 显示加载uni.showLoading({ title: '登录中',mask: true })// 2. 处理用户拒绝授权if (e.errMsg === 'getPhoneNumber:fail user deny') {throw new Error('用户拒绝授权')}// 3. 获取登录codeconst loginResult = await login()// 4. 调用后端登录接口const loginRes = await request({url: '/api/login',method: 'POST',data: {code: loginResult,phoneCode: e.detail.code}})// 5. 存储tokenuni.setStorageSync('token', loginRes.token)// 6. 提示成功uni.showToast({title: '登录成功',icon: 'success'})} catch (error) {// 错误处理uni.showToast({title: error.message || '登录失败',icon: 'error'})} finally {// 隐藏加载uni.hideLoading()}
}

最佳实践

  1. 错误处理
// 统一的错误处理
const handleLoginError = (error: any) => {let message = '登录失败'if (error.errMsg) {switch (error.errMsg) {case 'login:fail':message = '登录失败,请重试'breakcase 'getPhoneNumber:fail user deny':message = '用户拒绝授权'break// ... 其他错误类型}}uni.showToast({title: message,icon: 'error'})
}
  1. 自动登录处理
const autoLogin = async () => {try {// 1. 检查本地tokenconst token = uni.getStorageSync('token')if (!token) return false// 2. 验证token有效性const valid = await verifyToken(token)return valid} catch (error) {// 3. 清除无效tokenuni.removeStorageSync('token')return false}
}

参考文档

  1. uni.login文档
  2. 微信小程序登录文档
  3. 微信小程序获取手机号文档

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

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

相关文章

C语言——验证“哥德巴赫猜想”

问题描述&#xff1a; 验证"哥德巴赫猜想" 任何一个大于2的偶数都可以表示为两个质数之和。例如&#xff0c;4可以表示为22&#xff0c;6可以表示为33&#xff0c;8可以表示为35等 //验证"哥德巴赫猜想" //任何一个大于2的偶数都可以表示为两个质数之和…

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中&#xff0c;过多的开机自启动软件会严重拖慢电脑的开机速度&#xff0c;影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件&#xff0c;让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…

分布式搜索引擎之elasticsearch基本使用2

分布式搜索引擎之elasticsearch基本使用2 在分布式搜索引擎之elasticsearch基本使用1中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以j接下来&#xff0c;我们研究下…

Android启动优化指南

文章目录 前言一、启动分类与优化目标1、冷启动1.1 优化思路1.2 延迟初始化与按需加载1.3 并行加载与异步执行1.4 资源优化与懒加载1.5 内存优化与垃圾回收控制 2. 温启动2.1 优化应用的生命周期管理2.2 数据缓存与懒加载2.3 延迟渲染与视图优化 3. 热启动3.1 保持应用的状态3.…

[ACTF2020 新生赛]Include

感觉毫无头绪e一下&#xff0c;发现要使用伪协议 伪协议&#xff1a;是PHP自己支持的一种协议与封装协议&#xff0c;简单说就是PHP定义的一种特殊访问资源的方法。 2.什么时候用PHP伪协议? 可能遇到的文件包含函数&#xff1a; 1、include 2、require 3、include_once 4、r…

PHP实现华为OBS存储

一&#xff1a;华为OBS存储文档地址 官方文档&#xff1a;https://support.huaweicloud.com/obs/index.html github地址&#xff1a;https://github.com/huaweicloud/huaweicloud-sdk-php-obs 二&#xff1a;安装华为OBS拓展 composer require obs/esdk-obs-php 三&#x…

vue3使用Eachart图表库踩坑记录

前言 大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识。很久很更新了&#xff0c;最近一直在加班&#xff0c;今天记录一个eachar图表报警告说过去不到当前DOM节点的宽高导致页面中的图表宽高不正确的坑。 案例 就是一些基础的图形的使用&#xff0c;一个后…

python录制鼠标键盘操作循环播放

依赖 pip install pynput 程序: from pynput import mouse, keyboard import time import threading# 用于存储录制的鼠标和键盘事件 mouse_events [] keyboard_events []# 定义事件处理函数# 处理鼠标事件 def on_move(x, y):mouse_events.append((move, x, y))def on_cl…

十九(GIT2)、token、黑马就业数据平台(页面访问控制(token)、首页统计数据、登录状态失效)、axios请求及响应拦截器、Git远程仓库

1. JWT介绍 JSON Web Token 是目前最为流行的跨域认证解决方案&#xff0c;本质就是一个包含信息的字符串。 如何获取&#xff1a;在使用 JWT 身份验证中&#xff0c;当用户使用其凭据成功登录时&#xff0c;将返回 JSON Web Token&#xff08;令牌&#xff09;。 作用&#xf…

【系统架构核心服务设计】使用 Redis ZSET 实现排行榜服务

目录 一、排行榜的应用场景 二、排行榜技术的特点 三、使用Redis ZSET实现排行榜 3.1 引入依赖 3.2 配置Redis连接 3.3 创建实体类&#xff08;可选&#xff09; 3.4 编写 Redis 操作服务层 3.5 编写控制器层 3.6 测试 3.6.1 测试 addMovieScore 接口 3.6.2 测试 g…

架构15-服务网格

零、文章目录 架构15-服务网格 1、透明通信的涅槃 &#xff08;1&#xff09;服务网格 概念 服务网格是一种处理程序间通信的基础设施&#xff0c;主要由数据平面和控制平面组成。它通过边车代理和控制程序管理程序间的通信&#xff0c;弥补了容器编排系统对分布式应用细粒…

constexpr、const和 #define 的比较

constexpr、const 和 #define 的比较 一、定义常量 constexpr 定义&#xff1a;constexpr用于定义在编译期可求值的常量表达式。示例&#xff1a;constexpr int x 5;这里&#xff0c;x的值在编译期就确定为5。 const 定义&#xff1a;const表示变量在运行期间不能被修改&…

C# RSA加密和解密,RSA生成私钥和公钥

C# RSA加密和解密&#xff0c;RSA生成私钥和公钥&#xff08;使用XML格式秘钥&#xff09; 目录 前言生成xml格式的公钥和私钥 PrivateKeyPublicKey测试加密、解密 方案1&#xff1a;RSA公钥加密&#xff0c;RSA私钥解密方案2&#xff1a;RSA私钥加密&#xff0c;RSA私钥解密…

洛谷P1208

[USACO1.3] 混合牛奶 Mixing Milk - 洛谷 [USACO1.3] 混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低&#xff0c;所以降低原材料&#xff08;牛奶&#xff09;价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购方案。 Marry 乳业从一些奶农手中采购牛奶&…

Linux命令进阶·软链接命令(ln)、查看系统时间命令(date)、自动校准系统时间程序(ntp)

目录 1. 软链接——ln命令 2. 查看系统时间——date命令 3. 自动校准系统时间——ntp程序 1. 软链接——ln命令 在系统中创建软链接&#xff0c;可以将文件、文件夹链接到其他位置。作用相当于windows中的快捷方式。 语法&#xff1a;ln -s 参数1 参数2 -s选项&#xff…

RabbitMQ如何保证消息不被重复消费

前言&#xff1a; 正常情况下&#xff0c;消费者在消费消息后&#xff0c;会给消息队列发送一个确认&#xff0c;消息队列接收后就知道消息已经被成功消费了&#xff0c;然后就从队列中删除该消息&#xff0c;也就不会将该消息再发送给其他消费者了。不同消息队列发出的确认消…

#Vue3篇:生命周期简洁

setup类似breforeCreate create setup() 钩子是在组件中使用组合式 API 的入口 挂载 onBeforeMount组件被挂载之前执行 onMounted 组件挂载完后执行 更新 onBeforeUpdate组件响应式状态变更而更新Dom树之后执行 onUpdated 组件响应式状态变更而更新Dom树之后执行 卸载 …

java 使用JSqlParser和CCJSqlParser 解析sql

maven <dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.9</version> </dependency>解析SQL String sql "select aa,bb from b"; Statement statementCCJSq…

动态规划——机器分配、01背包问题

一、机器分配 题目名称&#xff1a;机器分配 题目描述&#xff1a; 总公司拥有高效设备M台&#xff0c;准备分给下属的N个分公司。 各分公司若获得这些设备&#xff0c;可以为国家提供一定的盈利。 问&#xff1a;如何分配这M台设备才能使国家得到的盈利最大&#xff1f;求出最…

深入解析 JavaScript 中的 Blob 对象:二进制数据处理的核心

文章目录 1.Blob是什么2.Blob用法实例属性Blob方法slice方法text方法 示例1&#xff1a;字符串 Blob示例2&#xff1a;数组和字符串 Blob示例3&#xff1a;从文件输入创建 3.使用场景1.创建 Blob 并生成 URL&#xff0c;下载文件2.文件上传3.切片上传3.Blob用于URL在线预览PDF文…