当前位置: 首页 > news >正文

华为HarmonyOS 让应用快速拥有账号能力 -- 3 获取用户手机号

场景介绍

当应用对获取的手机号时效性要求不高时,可使用Account Kit提供的手机号授权与快速验证能力,向用户发起手机号授权申请,经用户同意授权后,获取到手机号并为用户提供相应服务。以下只针对Account kit提供的手机号授权与快速验证能力进行介绍,快速验证手机号功能还可使用场景化控件快速验证手机号Button进行实现。

说明

对用户选择的华为账号绑定的手机号或者新增的手机号进行验证,不保证是实时的验证仅首次需要用户授权

业务流程

流程说明:

  1. 应用通过传对应scope和permission调用授权API,如果已授权则直接返回临时登录凭证Authorization Code、UnionID、OpenID,如果没有授权则拉起授权页,在用户授权后,返回Authorization Code、UnionID、OpenID。
  2. 将Authorization Code传给应用服务器,使用Client ID、Client Secret、Authorization Code从华为服务器中获取Access Token,再使用Access Token请求获取用户信息。
  3. 从用户信息中获取到手机号、UnionID、OpenID。

接口说明

获取快速验证手机号关键接口如下表所示,具体API说明详见API参考。

接口名

描述

createAuthorizationWithHuaweiIDRequest(): AuthorizationWithHuaweiIDRequest

获取授权接口,通过AuthorizationWithHuaweiIDRequest传入返回手机号的scope:phone及返回Authorization Code的permission:serviceauthcode,即可获取到Authorization Code、UnionID、OpenID。

constructor(context?: common.Context)

创建授权请求Controller。

executeRequest(request: AuthenticationRequest): Promise<AuthenticationResponse>

通过Promise方式执行授权操作。

注意

上述接口需在页面或自定义组件生命周期内调用。

开发前提

1、在进行代码开发前,请先确认您已完成开发准备工作。

2、应用获取手机号前,需要完成phone(获取您的手机号)的scope权限申请,详情参见配置scope权限,scope权限申请审批未完成或未通过,将报错1001502014 应用未申请scopes或permissions权限。

细分场景

对应scope

权限名称

权限描述

权限是否需要申请

快速验证手机号

phone

phone

获取您的手机号

3、设备需要登录华为账号,若未登录则拉起登录页面。

开发步骤

客户端开发

  1. 导入authentication模块及相关公共模块。
     
    1. import { authentication } from '@kit.AccountKit';
    2. import { hilog } from '@kit.PerformanceAnalysisKit';
    3. import { util } from '@kit.ArkTS';
    4. import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建授权请求并设置参数。
     
    1. // 创建授权请求,并设置参数
    2. const authRequest = new authentication.HuaweiIDProvider().createAuthorizationWithHuaweiIDRequest();
    3. // 获取手机号需要传如下scope,传参数之前需要先申请对应scope权限,才能返回对应数据
    4. authRequest.scopes = ['phone'];
    5. // 获取code需传如下permission
    6. authRequest.permissions = ['serviceauthcode'];
    7. // 用户是否需要登录授权,该值为true且用户未登录或未授权时,会拉起用户登录或授权页面
    8. authRequest.forceAuthorization = true;
    9. // 用于防跨站点请求伪造
    10. authRequest.state = util.generateRandomUUID();
  3. 调用AuthenticationController对象的executeRequest方法执行授权请求,并处理授权结果,从授权结果中解析出Authorization Code、UnionID、OpenID,之后将Authorization Code传给应用服务器处理。
     
    1. // 执行请求
    2. try {
    3. const controller = new authentication.AuthenticationController(getContext(this));
    4. controller.executeRequest(authRequest).then((data) => {
    5. const authorizationWithHuaweiIDResponse = data as authentication.AuthorizationWithHuaweiIDResponse;
    6. const state = authorizationWithHuaweiIDResponse.state;
    7. if (state != undefined && authRequest.state != state) {
    8. hilog.error(0x0000, 'testTag', `Failed to authorize. The state is different, response state: ${state}`);
    9. return;
    10. }
    11. hilog.info(0x0000, 'testTag', 'Succeeded in authentication.');
    12. const authorizationWithHuaweiIDCredential = authorizationWithHuaweiIDResponse.data!;
    13. const code = authorizationWithHuaweiIDCredential.authorizationCode;
    14. const unionID = authorizationWithHuaweiIDCredential.unionID;
    15. const openID = authorizationWithHuaweiIDCredential.openID;
    16. // 开发者处理code、unionID、openID
    17. }).catch((err: BusinessError) => {
    18. this.dealAllError(err);
    19. });
    20. } catch (error) {
    21. this.dealAllError(error);
    22. }

     
    1. // 错误处理
    2. dealAllError(error: BusinessError): void {
    3. hilog.error(0x0000, 'testTag', 'Failed to auth, errorCode=%{public}d, errorMsg=%{public}s', error.code,
    4. error.message);
    5. }

服务端开发

  1. 应用服务器使用Client ID、Client Secret、Authorization Code调用获取用户级凭证的接口向华为账号服务器请求获取Access Token、Refresh Token。
  2. 使用Access Token调用获取用户信息接口获取用户信息,从用户信息中获取用户手机号、UnionID、OpenID。

    Access Token过期处理

    由于Access Token的有效期仅为60分钟,当Access Token失效或者即将失效时(可通过REST API错误码判断),可以使用Refresh Token(有效期180天)通过刷新凭证向华为账号服务器请求获取新的Access Token。

    说明

    1. 当Access Token失效时,若您不使用Refresh Token向账号服务器请求获取新的Access Token,账号的授权信息将会失效,导致使用Access Token的功能都会失败。
    2. 当Access Token非正常失效(如修改密码、退出账号、删除设备)时,业务可重新登录授权获取Authorization Code,向账号服务器请求获取新的Access Token。

    Refresh Token过期处理

    由于Refresh Token的有效期为180天,当Refresh Token失效后(可通过REST API错误码判断),应用服务器端需要通知客户端,重新调用授权接口,请求用户重新授权。


http://www.mrgr.cn/news/78938.html

相关文章:

  • SpringBoot源码-Spring Boot启动时控制台为何会打印logo以及自定义banner.txt文件控制台打印
  • 【Golang】Golang基础语法(一):变量的定义
  • 前端面试热门题(二)[html\css\js\node\vue)
  • React 前端框架4
  • JVS低代码里表单与表格不同数据关联场景的实现方法
  • 界面控件DevExpress WPF v24.2新功能预览 - 人工智能(AI)集成
  • 【0347】Postgres内核 startup XLOG 之 核实 pg_wal 、 pg_wal/archive_status (1)
  • 树莓派明明安装了opencv和numpy,却找不到
  • Linux:内存文件 基础io
  • ShardingSphere介绍
  • 密码学实验工具--Cryptool2
  • 利用Ubuntu批量下载modis图像(New)
  • nlp培训重点
  • 【实战】Oracle基础之控制文件内容的5种查询方法
  • CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(不会)
  • (一)Linux下安装NVIDIA驱动(操作记录)
  • CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)
  • linux - FTP(包含匿名、本地以及虚拟用户登录)详细操作⭐
  • Linux网络——传输层
  • 解决stable-diffusion-webui时的问题:No module ‘xformers‘. Proceeding without it
  • 数据结构与算法学习笔记----堆
  • 分享一款 Vue 图片编辑插件 (推荐)
  • Qt入门6——Qt窗口
  • 01-树莓派基本配置-基础配置配置
  • 泷羽sec:shell编程(9)不同脚本的互相调用和重定向操作
  • 【天地图】HTML页面实现车辆轨迹、起始点标记和轨迹打点的完整功能