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

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手机号一键登录内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

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

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

相关文章

【Qt控件之QMessageBox】详解

Qt控件之QMessageBox 描述基于属性的API富文本和文本格式属性严重程度以及图标和Pixmap属性静态函数API 高级用法默认按钮和退出按钮示例使用场景 描述 QMessageBox类提供了一个模态对话框,用于通知用户或向用户提问并接收答案。 消息框显示一个主要文本以提醒用户…

Yuhan Blu-ray DVD Creator for Mac: 打造专属的高清视听盛宴

在如今的高清时代,谁能拒绝一款能够轻松将高清影片刻录成蓝光DVD的刻录机呢?而Yuhan Blu-ray DVD Creator for Mac正是这样一款令人惊艳的软件。 作为一款专为Mac用户打造的蓝光DVD刻录机,Yuhan Blu-ray DVD Creator for Mac支持将各种高清视…

PyQt5:构建目标检测算法GUI界面 (附python代码)

文章目录 1.界面2.代码3.Analyze 1.界面 目标检测算法一般就是检测个图片,然后显示图片结果。 最简单的情况,我们需要一个按钮读取图片,然后后有一个地方显示图片。 2.代码 import sys import numpy as np from PIL import Imagefrom PyQt…

Mybatis-Plus(企业实际开发应用)

一、Mybatis-Plus简介 MyBatis-Plus是MyBatis框架的一个增强工具,可以简化持久层代码开发MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网&a…

二叉树(9.7)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 2.二叉树概念及结构 2.1概念 2.2 特殊的二叉树 2.4 二叉树的存储结构 3.二叉树顺序结构及实现 3.1 二叉树的顺序结构 3.2 堆的概念及结构 1.树概念及结构 1.1树的概念 前面我们学习的都是组成简…

SpringBoot面试题8:运行 Spring Boot 有哪几种方式?Spring Boot 需要独立的容器运行吗?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:运行 Spring Boot 有哪几种方式? 运行Spring Boot应用有多种方式,具体取决于你的需求和环境。以下是几种常见的运行Spring Boot应用的方式: 使…

springboot+vue基于Hadoop短视频流量数据分析与可视化系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

【计算机网络】数据链路层——以太网

文章目录 前言什么是以太网以太网帧格式6位目的地址和源地址2位类型数据长度CRC 校验和 数据在数据链路层是如何转发的 前言 前面我们学习了关于应用层——自定义协议、传输层——UDP、TCP协议、网络层——IP协议,今天我将为大家分享关于数据链路层——以太网方面的…

金蝶云星空创建自动下推并保存公共服务

文章目录 金蝶云星空创建自动下推并保存公共服务创建公共方法按单下推数据按明细行下推数据调用下推操作 调用公共方法 金蝶云星空创建自动下推并保存公共服务 创建公共方法 按单下推数据 /// <summary>/// 获取单据转换数据包/// </summary>public DynamicObjec…

RIS辅助MIMO广播信道容量

RIS辅助MIMO广播信道容量 摘要RIS辅助的BC容量矩阵形式的泰勒展开学习舒尔补 RIS-Aided Multiple-Input Multiple-Output Broadcast Channel Capacity论文阅读记录 基于泰勒展开求解了上行容量和最差用户的可达速率&#xff0c;学习其中的展开方法。 摘要 Scalable algorithm…

UE4 使用材质后期 制作玻璃有雨效果

效果展示&#xff0c;其实这是一个动画效果 以上为所有逻辑 拿到TexCoord给到Panner&#xff0c;Time和Speed都是通过下面计算而来&#xff0c;后面讲&#xff0c;再拿到时间和速度值过后&#xff0c;加上扰动值&#xff0c;最后取G值&#xff0c;因为雨事从上而下的动&#xf…

【AIFEM案例操作】电器盒谐响应分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

JavaScript基础知识19——循环结构:while循环

哈喽&#xff0c;你好&#xff0c;我是雷工。 本节学习JavaScript基础语法的循环结构&#xff1a;while循环&#xff0c;以下为学习笔记。 while循环 循环概念&#xff1a;重复执行一些操作&#xff1b; 循环特征&#xff1a;不断地重复&#xff1b; while&#xff1a;在…期间…

面向Three.js开发者的3D自动纹理化开发包

DreamTexture.js 是面向 three.js 开发者的 3D 模型纹理自动生成与设置开发包&#xff0c;可以为 webGL 应用增加 3D 模型的快速自动纹理化能力。 图一为原始模型, 图二图三为贴图后的模型。提示词&#xff1a; city, Realistic , cinematic , Front view ,Game scene graph 1、…

Kitex踩坑 [Error] KITEX: processing request error,i/o timeout

报错问题 2023/010/28 17:20:10.250768 default_server_handler.go:234: [Error] KITEX: processing request error, remoteService, remoteAddr127.0.0.1:65425, errordefault codec read failed: read tcp 127.0.0.1:8888->127.0.0.1:65425: i/o timeout 分析原因 Hert…

基于dockerfile搭建lnmp

目录 任务需求&#xff1a; 一、规划&#xff1a; 二、准备&#xff1a; 三、部署nginx容器&#xff08;172.18.0.10&#xff09;&#xff1a; 1.编写Dockerfile构建镜像&#xff1a; 2.准备nginx配置文件&#xff1a; 3.构建镜像&#xff0c;启动nginx容器&#xff1a; 四…

【QT】事件分发器

event事件分发器&#xff0c;用于分发事件&#xff0c;在这里也可以做拦截&#xff0c;返回值boo。如果返回的是true代表拦截处理&#xff0c;不再向下分发。 展示事件拦截 上一段代码&#xff1a;【QT】鼠标常用事件-CSDN博客 代码 // 事件分发器 // 拦截鼠标按下 // QEven…

四十二、【进阶】

目录 1、覆盖索引 2、案例分析 &#xff08;1&#xff09;select * 查询 &#xff08;2&#xff09;使用字段查询 &#xff08;3&#xff09;性能差异原因 3、分析 &#xff08;1&#xff09;主键id查询 &#xff08;2&#xff09;覆盖索引 1、覆盖索引 简单点说&#x…

Nginx 部署多个安全域名,多个服务【工作记录】

以下是本人通过Docker 部署的Nginx挂载出来的文件目录 先看下 nginx.conf 配置文件内容&#xff1a;如下 ps&#xff1a;当前文件就是安装后的初始内容&#xff0c;无修改。主要关注最后一行 include /etc/nginx/conf.d/*.conf;表示引入其他目录下的.conf配置文件&#xff1b;…