uni-app中使用手机号一键登录的详细图文教程

news2025/1/16 11:00:25

1、首先需要在dcloud开发者控制台开通一键登录

https://dev.dcloud.net.cn/uniLogin

开通一键登录服务, 获取关键最关键的两个参数ApiKey和ApiSecret

在这里插入图片描述
真机调试无需添加应用,如需打包使用请添加。一键登录应用ID为离线打包时配置的appid

在这里插入图片描述
2、登录云服务空间,创建服务空间,选择云服务商等

https://unicloud.dcloud.net.cn/home

在这里插入图片描述
3、在uni-app项目中开通uniCloud服务【关联云空间选择阿里云或腾讯云】

在这里插入图片描述
4、新建云函数 创建 getPhoneNumber

在这里插入图片描述
新建云函数后会有一个index.js【getPhoneNumber/index.js】生成,粘贴以下代码:

'use strict';
// const crypto = require('crypto')
exports.main = async (event, context) => {
    //event为客户端上传的参数
    const res = await uniCloud.getPhoneNumber({
        appid: '__UNI__66AWES5', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数
        provider: 'univerify',
        apiKey: '******', // 在开发者中心开通服务并获取apiKey
        apiSecret: '******', // 在开发者中心开通服务并获取apiSecret
        access_token: event.access_token,
        openid: event.openid
    })
  
    // 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端
    // 如果数据库在uniCloud上,可以直接入库
    // 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,将手机号通过http方式传递给其他服务器的接口,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient
    //返回数据给客户端
    return {
        code: 0,
        message: '获取手机号成功',
        data:res
    }
}

5、项目右键关联云服务空间

在这里插入图片描述
选择创建的云服务空间

在这里插入图片描述
6、关联后上传部署到云空间
在这里插入图片描述
7、勾选一键登录(项目中的 manifest.json)
在这里插入图片描述
8、一键登录本地方法

// 手机号一键登录
loginPhone() {
    uni.preLogin({
        provider: 'univerify',
        success(res) { //预登录成功
            // 显示一键登录选项
            console.log(res);
            console.log('999',2222);
            console.log('预登录成功');
            uni.login({
                provider: 'univerify',
                univerifyStyle: { // 自定义登录框样式
                    //参考`univerifyStyle 数据结构`
                    "fullScreen": true, // 是否全屏显示,默认值: false
                    "title": '快速登录',
                    "backgroundColor": "#ffffff", // 授权页面背景颜色,默认值:#ffffff
                    "icon": {
                        "path": "../../static/my/头像.png" // 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo
                    },
                    "phoneNum": {
                        "color": "#000000", // 手机号文字颜色 默认值:#000000
                        "fontSize": "18" // 手机号字体大小 默认值:18
                    },
                    "slogan": {
                        "color": "#8a8b90", //  slogan 字体颜色 默认值:#8a8b90
                        "fontSize": "12" // slogan 字体大小 默认值:12
                    },
                    // 一键登录
                    "authButton": {
                        "normalColor": "#3479f5", // 授权按钮正常状态背景颜色 默认值:#3479f5
                        "highlightColor": "#2861c5", // 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持)
                        "disabledColor": "#73aaf5", // 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持)
                        "textColor": "#ffffff", // 授权按钮文字颜色 默认值:#ffffff
                        "title": "本机号码一键登录" // 授权按钮文案 默认值:“本机号码一键登录”
                    },
                    // 其他登录方式
                    "otherLoginButton": {
                        "visible": "true", // 是否显示其他登录按钮,默认值:true
                        "normalColor": "#f8f8f8", // 其他登录按钮正常状态背景颜色 默认值:#f8f8f8
                        "highlightColor": "#dedede", // 其他登录按钮按下状态背景颜色 默认值:#dedede
                        "textColor": "#000000", // 其他登录按钮文字颜色 默认值:#000000
                        "title": "密码登录", // 其他登录方式按钮文字 默认值:“其他登录方式”
                        "borderWidth": "1px", // 边框宽度 默认值:1px(仅ios支持)
                        "borderColor": "#c5c5c5" //边框颜色 默认值: #c5c5c5(仅ios支持)
                    },
                    // 自定义按钮登录方式
                    "buttons": { // 仅全屏模式生效,配置页面下方按钮  (3.1.14+ 版本支持)  
                        "iconWidth": "45px",        // 图标宽度(高度等比例缩放) 默认值:45px  
                        "list": [{  
                                "provider": "apple",
                                "iconPath": "/static/test.jpg",  // 图标路径仅支持本地图片  
                            },  
                            {  
                                "provider": "weixin",
                                "iconPath": "/static/test.jpg",  
                            }  
                        ]  
                    },
                    "privacyTerms": {
                        "defaultCheckBoxState": "true", // 条款勾选框初始状态 默认值: true
                        "textColor": "#8a8b90", // 文字颜色 默认值:#8a8b90
                        "termsColor": "#1d4788", //  协议文字颜色 默认值: #1d4788
                        "prefix": "我已阅读并同意", // 条款前的文案 默认值:“我已阅读并同意”
                        "suffix": "并使用本机号码登录", // 条款后的文案 默认值:“并使用本机号码登录”
                        "fontSize": "12", // 字体大小 默认值:12,
                        "privacyItems": [
                            // 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效
                            {
                                "url": "https://", // 点击跳转的协议详情页面
                                "title": "用户服务协议" // 协议名称
                            }
                        ]
                    }
                },
                success(res) { // 登录成功
                    console.log(res);
                    this.openid = res.authResult.openid;
                    this.access_token = res.authResult.access_token;
  
                    console.log(this.openid);
                    console.log("access_token",this.access_token);
  
  
  
                // 客户端(调用云函数)  调用云函数来实现整个业务逻辑
                // 在得到access_token后,通过callfunction调用云函数
                uniCloud.callFunction({
                    name:"getPhoneNumber",
                    data:{
                        'openid': this.openid,
                        'access_token': this.access_token
                    }
                }).then(res=>{
                    console.log("获取成功");
                    console.log(res); // res 内容则包含手机号码
                    // 获取用户的手机号
                    this.phoneNumber=res.result.data.phoneNumber;
                    console.log(this.phoneNumber);
                    console.log(res);
  
                    return utils.request(
                        "/api/api.php?action=phonelogin", //接口
                        "POST",
                        {
                            '参数'
                        },
                        false, true, true)
                        .then(res => {
                            uni.closeAuthView() //成功关闭授权页面
                            console.log('登录成功', res)
                            console.log(res.code);
                            if (res.code == 1){
                                setTimeout(() => {
                                    uni.redirectTo({
                                        url: '/pages/index/index'
                                    })
                                }, 500)
                            }
                        })
  
                }).catch((err)=>{
                    // 执行失败
                })
                },
                // 当用户点击自定义按钮时,会触发uni.login的fail回调[点击其他登录方式,可以跳转页面]
                // 判断返回数据执行任意逻辑
                fail(res){  // 登录失败
                    console.log(res.errCode)
                    console.log(res.errMsg)
                    if (res.code == "30002") {
                        console.log('密码登录');
                    }else if(res.code == "30008"){
                        console.log('自定义按钮登录方式');
                    }
                }
            })
        },
        fail(res) { // 预登录失败
            // 不显示一键登录选项(或置灰)
            // 根据错误信息判断失败原因,如有需要可将错误提交给统计服务器
            console.log('失败',2222);
            console.log(res.errCode)
            console.log(res.errMsg)
        }
    });
},

在这里插入图片描述
在这里插入图片描述
可以查看点击一键登录时返回的参数

在这里插入图片描述
总结
到此这篇关于uni-app中使用手机号一键登录的文章就介绍到这了,更多相关uni-app手机号一键登录内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

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

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

相关文章

智能井盖监测仪器的效果有哪些? 近些

年井盖事故频繁出现,尤其是在各个城市之中,由于井盖分布密集杂乱,并不能实行统一化管理,需要依靠传统人工巡查检修的方式,这就会带来更多的安全隐患。城市管理部门在对井盖进行监测只能依靠人工,监管不及时…

10-10 分层模式

Dao模式 程序员写的是业务(因为其逻辑性不太强) 软件设计原则:开闭原则,对新增加的进行开放,对修改关闭 实际开发中, web项目, 程序员编写业务代码 把所有的代码都写在业务方法中: 接收前端请求,获取请求参数… 编写业务代码处理请求 调用jdbc代码操…

小米澎湃OS发布,雷军小米的“统一”大棋局

千呼万唤始出来。2023年10月26日,小米澎湃OS终于揭开面纱。 雷军在主题为“跨越时刻”的发布会上,正式发布了小米澎湃OS。面对这款历时七年打造的全新操作系统,雷军难掩兴奋,他感慨道:“我心澎湃”。 小米新操作系统取…

docker中安装rabbitMq并配置启动

目录 1. 拉取镜像并安装(此处实例安装的是最新版)2.查看docker中已安装的镜像和版本3.启动RabbitMq4.配置管理端5.安装完成 1. 拉取镜像并安装(此处实例安装的是最新版) docker pull rabbitmq2.查看docker中已安装的镜像和版本 …

【c++|opencv】二、灰度变换和空间滤波---2.直方图和均衡化

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 图像直方图、直方图均衡化 1. 图像直方图 #include <iostream> #include <opencv2/opencv.hpp>using namespace cv; using namespace std;…

【多线程面试题十七】、如果不使用synchronized和Lock,如何保证线程安全?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;如果不使用synchronized…

文心一言 VS 讯飞星火 VS chatgpt (125)-- 算法导论10.6 6题

六、用go语言&#xff0c;任意有根树的左孩子右兄弟表示法中每个结点用到三个指针: leftchild、rightsibling 和parent。对于任何结点&#xff0c;都可以在常数时间到达其父结点&#xff0c;并在与其孩子数呈线性关系的时间内到达所有孩子结点。说明如何在每个结点中只使用两个…

军工工厂安全生产视频AI识别技术方案

一、需求分析 在国家政策、技术创新和企业发展需求转变等多个维度的共同驱动和协同下&#xff0c;特别是工业互联网作为“新基建”的提出&#xff0c;都在推动工业制造朝着数字化、网络化、智能化方向发展。军工装备制造行业承担着国民经济和国防建设的重要使命&#xff0c;构…

门面模式门面模式

目录 一.介绍 二.UML类图 未使用门面模式 使用门面模式 三.具体代码 业务代码 四.使用场景 一.介绍 门面模式&#xff08;Facade Pattern&#xff09;属于结构型模式。通过给多个复杂的子系统提供一个门面(高层接口)&#xff0c;使这些子系统更加容易的被访问&#xff0…

OpenLayers实战,OpenLayers实现TopoJson格式区划边界鼠标点击选中高亮显示,点击空白区域取消高亮

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers实现从vue项目中加载assets资源目录中的TopoJson格式数据,实现鼠标点击区划边界范围内时选并高亮显示,点击区划边界区域外取消高亮的功能。 本章是综合应用,为方便大家理解代码,拆分为简单的单一技术可以…

修改例程flags3_asyncio.py以解决RuntimeError错误

运行示例18-13 flags3_asyncio.py&#xff0c;程序报错如下&#xff1a; D:\Python\Python311\python.exe D:\fluentPy\chapter17_18\flags3_asyncio.py REMOTE site: https://www.fluentpython.com/data/flags/ Searching for 20 flags: from BD to VN 5 concurrent connecti…

nginx 转发数据流文件

1.问题描述 后端服务&#xff0c;从数据库中查询日志&#xff0c;并生成表格文件返回静态文件。当数据量几兆时&#xff0c;返回正常&#xff0c;但是超过几十兆&#xff0c;几百兆&#xff0c;就会超过网关的连接超时时间30秒。 时序图 这里面主要花费时间的地方在&#xff…

使用tensorflow创建自己的量化金融工具

介绍 在充满活力的金融领域,高频交易 (HFT) 已经成为游戏规则的改变者。高频交易能够在几毫秒内执行数千个订单,利用先进的算法和计算技术实时利用微小的价格差异。随着金融市场的不断发展,支持高频交易策略的工具和框架也必须不断发展。在这一背景下,TF Quant Finance (T…

AGENTTUNING:为LLM启用广义的代理能力

背景 翻译智谱这篇文章的初衷是&#xff0c;智谱推出了他们所谓的第三代大模型。这第三代的特点在哪呢&#xff1a;个人总结主要有一下几个点&#xff1a; 1.用特定prompt方式自闭环方式解决安全注入问题 2.增加了模型function call、agent能力 3.具备代码能力 4.做了能力…

excel从身份证号截取出生年月日

1、身份证号第7-14位&#xff0c;代表出生日期 2、用鼠标选中出生日期要存入的单元格&#xff0c;在编辑栏&#xff0c;输入函数公式&#xff1a;TEXT(MID(B3,7,8),"00-00-00")&#xff0c;然后按【CtrlEnter】结束确认&#xff0c;即可提取出身份证中的出生日期&am…

应急响应—挖矿病毒与勒索病毒

应急响应—挖矿病毒与勒索病毒 1. 前言2. 挖矿病毒2.1. 挖矿病毒传播方式2.2. 挖矿病毒危害2.3. 挖矿病毒防范2.4. 威胁情报中心 3. 勒索病毒3.1. 勒索病毒传播方式3.2. 勒索病毒危害3.3. 勒索病毒防范3.4. 勒索病毒家族及识别3.5. 解密工具下载3.5.1. 勒索病毒搜索平台3.5.2. …

群晖设置DDNS (服务商Godaddy被墙 DDNS-GO无法解析 采用自定义脚本方式完成DDNS更新)

起因&解决思路 事情的开始大概是这样的。。godaddy买了个域名&#xff0c;好好的用了半个月。。然后一直更新失败发现被狗东西墙了 在提一嘴DDNS-GO 解析失败原因 DDNS-GO必须要先向godaddy请求自己的IP地址[这里被墙卡住了]&#xff0c;然后比对&#xff0c;再决定是否上…

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章&#xff1a;网络安全https 记得耐心看完&#xff0c;下面说问题&#xff1a; Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…

私有网络的安全保障,WorkPlus Meet内网视频会议助力企业高效会议

在企业内部沟通与协作中&#xff0c;视频会议成为了一种必不可少的沟通方式。然而&#xff0c;传统的互联网视频会议往往受制于网络不稳定因素&#xff0c;给企业带来不便与困扰。WorkPlus Meet作为一款专注内网视频会议的软件&#xff0c;致力于为企业打造高效、稳定的内网视频…

openpnp - code review - 开机对话框历史记录和贡献者名单

文章目录 openpnp - code review - 开机对话框历史记录和贡献者名单概述笔记D:\my_openpnp\openpnp_dev_2022_0801\src\main\java\org\openpnp\gui\AboutDialog.javaEND openpnp - code review - 开机对话框历史记录和贡献者名单 概述 偶然发现, 自己打包后的openpnp, 开机后…