OpenHarmony端云一体化应用开发快速入门练习(中)登录认证

news2024/11/25 12:41:53

一、登录认证手机
可以在应用中集成手机帐号认证方式,您的用户可以使用“手机号码+密码”或者“手机号码+验证码”的方式来登录您的应用。
(一)前提条件
需要在AGC控制台开通认证服务。

需要先在您的应用中集成SDK。

(二)注册

1.申请手机号码注册的验证码。

说明:在使用手机号码注册之前,需要先验证您的手机,确保该手机归您所有。

调用AGConnectAuth.requestPhoneVerifyCode 申请验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.REGISTER_LOGIN)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestPhoneVerifyCode(countryCode,phoneNumber,verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

使用手机号码注册用户。
调用PhoneUserBuilder生成PhoneUser,然后调用AGConnectAuth.createPhoneUser注册用户。注册成功后,系统会自动登录,无需再次调用登录接口

let user = new PhoneUserBuilder()
    .setCountryCode("countryCode")
    .setPhoneNumber("phoneNumber")
    .setPassword("password") //可以给用户设置初始密码。填写后后续可以用密码来登录
    .setVerifyCode('verifyCode')
    .build();

agconnect.auth().createPhoneUser(user)
.then(result => {
// 创建用户成功
})
.catch(error => {
// 创建用户失败
})

3.登录成功后可以调用AGConnectAuth.getCurrentUser获取用户帐号数据。

agconnect.auth().getCurrentUser();

复制

(三)密码登录


1.在应用的登录界面,初始化AGConnectAuth实例,获取AGC的用户信息,检查是否有已经登录的用户。如果有,则可以直接进入用户界面,否则显示登录界面。

agconnect.auth().getCurrentUser().then(user=>{
    if(user){
        //业务逻辑
    }
});
2.调用PhoneAuthProvider.credentialWithPassword采用密码方式创建手机帐号凭证。
credential = agconnect.auth().PhoneAuthProvider.credentialWithPassword(countryCode,phoneNumber,password);
3.获取credential成功后,调用AGConnectAuth.signIn实现登录。
agconnect.auth().signIn(credential)
         .then(user => {
             //登录成功
         }).catch(error => {
             //登录失败
         });

(四)验证码登录

1.在应用的登录界面,初始化AGConnectAuth实例,获取AGC的用户信息,检查是否有已经登录的用户。如果有,则可以直接进入用户界面,否则显示登录界面。

agconnect.auth().getCurrentUser().then(user=>{
    if(user){
        //业务逻辑
    }
});

2.调用AGConnectAuth.requestPhoneVerifyCode申请手机登录验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.REGISTER_LOGIN)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestPhoneVerifyCode(countryCode, phoneNumber,verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

3.调用PhoneAuthProvider.credentialWithVerifyCode采用验证码方式创建手机帐号凭证。

credential = agconnect.auth().PhoneAuthProvider.credentialWithVerifyCode(countryCode, phoneNumber, verifyCode);
4.获取credential成功后,调用AGConnectAuth.signIn实现登录。
agconnect.auth().signIn(credential)
         .then(user => {
             //登录成功
         }).catch(error => {
             //登录失败
         });

(五)修改手机号码
注意,修改手机号码需要用户处于登录状态。
1.调用AGConnectAuth.requestPhoneVerifyCode申请验证码

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.REGISTER_LOGIN)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestPhoneVerifyCode(countryCode,phoneNumber,verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

2.调用AGConnectUser.updatePhone修改手机号码。

user.updatePhone(countryCode, newPhone, newVerifyCode, lang);

说明:对于修改手机号码操作,要求用户必须在5分钟内登录过应用才能执行。若登录已超时,请参见帐号重认证先完成重认证。
(六)修改密码
注意:修改密码时需要用户处于登录状态。
1.调用AGConnectAuth.requestPhoneVerifyCode申请验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.RESET_PASSWORD)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestPhoneVerifyCode(countryCode,phoneNumber,verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

2.调用AGConnectUser.updatePassword修改密码。

// 手机provider为11
user.updatePassword(newPassword, verifyCode, AGConnectAuthCredentialProvider.Phone_Provider);

说明:对于修改手机密码操作,要求用户必须在5分钟内登录过应用才能执行。若登录已超时,请参见帐号重认证先完成重认证。
(七)重置密码
注意:重置密码时用户可以不登录。
1.调用AGConnectAuth.requestPhoneVerifyCode申请验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.RESET_PASSWORD)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestPhoneVerifyCode(countryCode,phoneNumber,verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

2.调用AGConnectAuth.resetPasswordByPhone重置密码。

agconnect.auth().resetPasswordByPhone(countryCode, phoneNumber, newPassword, verifyCode);

(八)更多信息
如果想让用户可以使用多个帐号登录您的应用,可以将多个帐号进行关联。
当用户不需要使用应用,或者需要切换其他帐号登录认证,可以先执行登出。
当用户需要注销当前用户,可以进行销户。
对于销户、修改密码、关联帐号以及重置手机帐号和邮箱帐号等敏感操作,为了提高安全性,需要用户必须在5分钟内登录过才能执行。如果用户执行敏感操作时登录超过5分钟,需要帐号重认证后再执行敏感操作。
可以参考异常处理实现自己的异常处理机制,从而减少异常情况的发生。
可以使用云函数触发器来接收用户注册、登录、销户等关键事件,从而扩展认证服务的能力。
二、登录认证邮箱

可以在应用中集成邮箱帐号认证方式,您的用户可以使用“邮箱地址+密码”或者“邮箱地址+验证码”的方式来登录您的应用。
(一)前提条件
需要在AGC控制台开通认证服务。
需要先在您的应用中集成SDK。
(二)注册


1.申请手机号码注册的验证码。
说明:在使用手机号码注册之前,需要先验证您的手机,确保该手机归您所有。
调用AGConnectAuth.requestPhoneVerifyCode 申请验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.REGISTER_LOGIN)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestPhoneVerifyCode(countryCode,phoneNumber,verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

2.使用手机号码注册用户。
调用PhoneUserBuilder生成PhoneUser,然后调用AGConnectAuth.createPhoneUser注册用户。注册成功后,系统会自动登录,无需再次调用登录接口。

let user = new PhoneUserBuilder()
    .setCountryCode("countryCode")
    .setPhoneNumber("phoneNumber")
    .setPassword("password") //可以给用户设置初始密码。填写后后续可以用密码来登录
    .setVerifyCode('verifyCode')
    .build();

agconnect.auth().createPhoneUser(user)
.then(result => {
// 创建用户成功
})
.catch(error => {
// 创建用户失败
})

3.登录成功后可以调用AGConnectAuth.getCurrentUser获取用户帐号数据。

agconnect.auth().getCurrentUser();

(二)密码登录


1.在应用的登录界面,初始化AGConnectAuth实例,获取AGC的用户信息,检查是否有已经登录的用户。如果有,则可以直接进入用户界面,否则显示登录界面。

agconnect.auth().getCurrentUser().then(user=>{
    if(user){
        //业务逻辑
    }
});

2.调用PhoneAuthProvider.credentialWithPassword采用密码方式创建手机帐号凭证。

credential = agconnect.auth().PhoneAuthProvider.credentialWithPassword(countryCode,phoneNumber,password);

3.获取credential成功后,调用AGConnectAuth.signIn实现登录。

agconnect.auth().signIn(credential)
         .then(user => {
             //登录成功
         }).catch(error => {
             //登录失败
         });

(三)验证码登录


1.在应用的登录界面,初始化AGConnectAuth实例,获取AGC的用户信息,检查是否有已经登录的用户。如果有,则可以直接进入用户界面,否则显示登录界面。

agconnect.auth().getCurrentUser().then(user=>{
    if(user){
        //业务逻辑
    }
});

2.调用AGConnectAuth.requestEmailVerifyCode申请登录验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.REGISTER_LOGIN)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestEmailVerifyCode('email',verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  })

3.调用EmailAuthProvider.credentialWithVerifyCode采用验证码方式创建邮箱帐号凭证(credential)。

credential = agconnect.auth().EmailAuthProvider.credentialWithVerifyCode(emailStr, password, verifyCode);

password参数可以不传,如果同时输入了密码和验证码,则会对密码和验证码都做验证。
4.获取credential成功后,调用AGConnectAuth.signIn实现登录。

agconnect.auth().signIn(credential)
         .then(user => {
             //登录成功
         }).catch(error => {
             //登录失败
         });

(五)修改邮箱地址
注意:修改邮箱时需要用户处于登录状态。
1.调用AGConnectAuth.requestEmailVerifyCode申请验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.REGISTER_LOGIN)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestEmailVerifyCode('email',verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

2.调用AGConnectUser.updateEmail修改邮箱地址。

user.updateEmail(newEmail, newVerifyCode, lang)

说明:对于修改邮箱地址操作,要求用户必须在5分钟内登录过应用才能执行。若登录已超时,请参见帐号重认证先完成重认证。
(六)修改密码
注意:修改密码时需要用户处于登录状态。
1.调用AGConnectAuth.requestEmailVerifyCode申请验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.RESET_PASSWORD)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestEmailVerifyCode('email',verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

2.调用AGConnectUser.updatePassword修改密码。

// 邮箱provider为12
user.updatePassword(newPassword, verifyCode, provider);

说明:对于修改邮箱密码操作,要求用户必须在5分钟内登录过应用才能执行。若登录已超时,请参见帐号重认证先完成重认证。
(七)重置密码
注意:重置密码时用户可以不登录。
1.调用AGConnectAuth.requestEmailVerifyCode申请验证码。

let verifyCodeSettings = new VerifyCodeSettingBuilder()
  .setAction(VerifyCodeAction.RESET_PASSWORD)
  .setLang('zh_CN')
  .setSendInterval(60)
  .build();
agconnect.auth().requestEmailVerifyCode('email',verifyCodeSettings)
  .then(verifyCodeResult => {
     //验证码申请成功
  }).catch(error => {
      //验证码申请失败    
  });

2.调用AGConnectAuth.resetPasswordByEmail重置密码。

agconnect.auth().resetPasswordByEmail(email, newPassword, verifyCode);

(八)更多信息
如果想让用户可以使用多个帐号登录您的应用,可以将多个帐号进行关联。
当用户不需要使用应用,或者需要切换其他帐号登录认证,可以先执行登出。
当用户需要注销当前用户,可以进行销户。
对于销户、修改密码、关联帐号以及重置手机帐号和邮箱帐号等敏感操作,为了提高安全性,需要用户必须在5分钟内登录过才能执行。如果用户执行敏感操作时登录超过5分钟,需要帐号重认证后再执行敏感操作。
您可以参考异常处理实现自己的异常处理机制,从而减少异常情况的发生。
您可以使用云函数触发器来接收用户注册、登录、销户等关键事件,从而扩展认证服务的能力。
三、登录认证关联帐号
(一)前提条件
您需要在AGC控制台开通认证服务。
您需要先在您的应用中集成SDK。
(二)将身份验证提供方凭据与用户帐号关联
可以将身份验证提供方凭据关联至现有用户帐号,允许用户使用多个身份验证提供方服务登录您的应用。无论用户使用哪个帐号登录,均可通过同一AGC用户ID识别用户。例如,使用手机帐号登录的用户可以关联邮箱帐号,以后便可使用这两种方法中的任意一种登录。
说明:关联帐号前,需要为应用增加对两个或多个身份验证提供方(可能包括匿名身份验证)的支持。
关联的认证方式只能有一个帐号,例如手机帐号关联邮箱帐号,只能关联一个邮箱帐号,不能关联多个。另外被关联的帐号需要没有登录过应用,例如已经通过认证服务登录过的邮箱帐号也无法进行关联。


1.使用任意身份验证提供方让用户登录。
2.按照新身份验证提供方的登录流程逐步进行,直到调用AGConnectAuth.signIn方法前停止。
3.为新的身份验证提供方获取AGConnectAuthCredential,示例如下。

let credential;
// 用于关联手机号的credential 
credential = agconnect.auth().PhoneAuthProvider.credentialWithVerifyCode(countryCode, phonenumber, verifyCode);
// 用于关联邮箱的credential 
credential = agconnect.auth().EmailAuthProvider.credentialWithVerifyCode(email, verifyCode);

4.将credential传递到已登录用户的AGConnectUser.link接口中。关联成功后,即可以使用任意一个提供方的凭证来登录相同的AGC帐号

agconnect.auth().getCurrentUser().then(async user=>{
    await user.link(credential);
});

(三)取消身份验证提供方凭据与用户帐号的关联
也可以取消身份验证提供方凭据与用户帐号的关联,以便用户不再使用该身份验证提供方进行登录。
取消关联时,需提供要取消的身份验证提供方ID,然后调用AGConnectUser.unlink接口进行取消。
说明:当仅有一个身份验证提供方时不能进行取消关联操作。

agconnect.auth().getCurrentUser().then(async user=>{
    await user.unlink(credentialProvider);
});

(四)更多信息
当用户不需要使用应用,或者需要切换其他帐号登录认证,可以先执行登出。
当用户需要注销当前用户,可以进行销户。
对于销户、修改密码、关联帐号以及重置手机帐号和邮箱帐号等敏感操作,为了提高安全性,需要用户必须在5分钟内登录过才能执行。如果用户执行敏感操作时登录超过5分钟,需要帐号重认证后再执行敏感操作。
可以参考异常处理实现自己的异常处理机制,从而减少异常情况的发生。

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

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

相关文章

安全测试-优秀测试工程师必备的4项安全测试方法

用您5分钟时间阅读完,希望能对您有帮助! 一.安全性测试 1、安全性测试方法 测试手段可以进行安全性测试,目前主要安全测试方法有:   1)静态的代码安全测试 主要通过对源代码进行安全扫描,根据程序中数…

网站开发实录(四)个人博客建站

一、前期准备 由于时间问题,已经准备好了服务器以及域名 服务器平台为“雨云”(朋友那里嫖来的),域名购买平台为阿里云(零元购来的)。接下来我将以此为例介绍个人博客建站过程,顺带记录我的第二…

原生微信小程序全流程(基础知识+项目全流程)

小程序的基本使用 小程序文件类型 小程序主要提供了 4 种文件类型: 类型名称作用是否必须存在.wxml用于页面的布局结构,相当于网页中 .html 文件是.wxss用于页面的样式,相当于网页中的 .css 文件否.js用于页面的逻辑是.json用于页面的配置…

最新Python3.11.4版本和PyCharm开发工具安装详细教程

Python3.11.4版本安装详细教程 1. 官网下载Python安装包1.1 进入官网1.2 查看系统类型1.3 选择与主机位数相同的安装程序 2.运行安装程序2.1 Customize installation(自定义安装)2.2 Optional Features(可选功能)2.3 Advanced Opt…

synchronized 底层实现原理、重量级锁、轻量锁、锁膨胀、锁自旋、偏向锁详解

目录 0、基础知识:Java对象的存储格式 1. synchronized底层:Monitor(重量级锁):被锁的对象与Monitor的关系 2. synchronized底层:轻量级锁优化,栈帧与被锁的对象的关系 3. 锁膨胀&#xff…

【arduino】HC-SR04超声波测距模块的驱动与使用

arduino超声波测距模块的驱动与使用 什么是超声波测距模块参数:引脚定义电路超声波传感器的控制时序驱动代码接线代码工程文件超声波是振动频率高于20KHZ的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点应用广泛,适合大学生、工程师、技…

精简版Git基础操作(快速上手)

文章目录 前言一、初始化二、新建仓库三、工作区域和文件状态四、添加和提交文件五、回退到之前版本六、查看文件差异七、从版本库中删除文件八、.gitignore忽略文件九、github远程仓库--SSH配置和克隆仓库十、关联本地仓库与远程仓库十一、分支十二、解决合并冲突回退和rebase…

Go mmap 文件内存映射

Go mmap 文件内存映射 mmap是个很好用的内存映射工具,它可以将文件映射到内存中,可以方便地操作文件。使用mmap的优点是: 内存映射可以使得读写文件的性能更高,因为操作的是内存而不是磁盘。可以方便地操作文件,不需…

语音录音转文字的方法使用过吗

大家好!今天我要给你们介绍一个实用的功能,那就是录音转文字啦!它可以把录音中的声音内容快速且准确地转换成文字格式,让我们在工作和学习中变得更加高效和便利。我们在会议记录、采访访谈、语音笔记等领域,可以很大地…

自动化测试之稳定性测试的设计

目录 前言 压力Stress 随机Randomness 并发Concurrency 交互Interaction 时间Time 总结: 前言 稳定性测试是自动化测试领域最为核心的内容之一。稳定性测试设计应该考虑哪些方面?如何在有限的样本上最大化测试产出?笔者结合自动化的一…

Vivado 下 呼吸灯实验

目录 Vivado 下 呼吸灯实验 1、实验简介 2、实验环境 3、实验任务 4、硬件设计 5、程序设计 5.1、呼吸灯代码如下: 5.2、添加约束文件 .xdc 5.3、下载验证 Vivado 下 呼吸灯实验 呼吸灯最早由苹果公司发明并应用于笔记本睡眠提示上,其一经展出&…

2023年6月GESP能力等级认证C++二级真题

2023-06 GESP二级真题 题数:27 分数:100 测试时长:90min 一、单选题(每题 2 分,共 30 分) 1. 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执…

电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume

1、数据仓库概念 数据仓库( Data Warehouse ),是为企业制定决策,提供数据支持的。可以帮助企业,改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括:业务数据、用户行为数据和爬虫数据等。 业务数…

Linux信号概念、认识、处理动作 ( 2 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the…

适合嵌入式开发的GUI(嵌入式学习)

嵌入式开发的GUI如何选择? 常见的嵌入式GUI开发方法轻量级GUI库优缺点 基于Web技术优缺点 Qt框架优缺点 原生开发优缺点 嵌入式系统的限制 常见的嵌入式GUI开发方法 嵌入式开发中的GUI(图形用户界面)是指在嵌入式系统中实现图形化的用户界面…

Unity核心7——2D动画

一、序列帧动画 (一)什么是序列帧动画 ​ 我们最常见的序列帧动画就是我们看的日本动画片,以固定时间间隔按序列切换图片,就是序列帧动画的本质 ​ 当固定时间间隔足够短时,我们肉眼就会认为图片是连续动态的&#…

Pandas数据处理与分析教程:从基础到实战

文章目录 前言什么是Pandas?Pandas的安装和导入数据结构Series(案例1:创建Series)DataFrame(案例2:创建DataFrame) 数据读取和写入从CSV文件中读取数据(案例3:读取CSV文件…

一起学SF框架系列6.2-模块core-Environment

Environment是集成在容器中的抽象接口,它对应用程序环境的两个关键方面进行建模:配置文件(profiles)和属性(properties)。 配置文件(profiles) 配置文件为核心容器中提供了一种机制…

Redis7---单线程和多线程(一)

目录 一、几个面试题 1.Redis的单线程部分 1.2 Redis所谓的“单线程” 1.3 Redis演进变化 1.3.1 Redis 3.x 单线程时代性能很快的原因 1.3.2 Redis 4.0 之前一直采用单线程的主要原因有三个 2. Redis单线程为什么加了多线程特性 3.Redis 6/7的多线程特性和IO多路复用入…

【系统架构】第二章-计算机系统基础知识(一)

计算机硬件 1、处理器:CISC(复杂指令集)、RISC(精简指令集) 2、存储器:按照与处理器的物理距离:片上缓存、片外缓存、主存、外存 3、总线:按照总线在计算机中的位置划分&#xff1a…