鸿蒙 HarmonyOS NEXT端云一体化开发-认证服务篇

海哥  金牌会员 | 2024-10-29 11:50:05 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 826|帖子 826|积分 2478

一、开通认证服务

地点:AppGallery Connect (huawei.com)
  1. 步骤:
  2. 1 进入到项目设置页面中,并点击左侧菜单中的认证服务
  3. 2 选择需要开通的服务并开通
复制代码


二、端侧项目情况配置


添加依赖

  1. entry目录下的oh-package.json5
  2. // 添加:主要前2个依赖
  3. "dependencies": {
  4.     "@hw-agconnect/cloud": "^1.0.0",
  5.     "@hw-agconnect/hmcore": "^1.0.0",
  6.     "@hw-agconnect/auth-component": "^1.0.0", // 可选
  7.     "long": "5.2.1"
  8.   }
复制代码

开通网络权限

  1. // 文件名:module.json5
  2. // 路径:src/main/module.json5
  3.   "requestPermissions": [
  4.       {
  5.         "name": "ohos.permission.INTERNET" // 网络权限
  6.       },
  7.     ]
复制代码

更新agconnect-services.json文件

  1. // AGC网站提示:下载最新的配置文件(如果您修改了项目、应用信息或者更改了某个开发服务设置,可能需要更新该文件)
  2. 为了确保项目不会出错,建立更新下该配置文件
复制代码

三 认证组件界面示例


  • 新建Login.ets页面,并设置成为应用首页


  • Login.ets调用认证组件
  1. import { AuthMode, Login } from '@hw-agconnect/auth-component';
  2. import router from '@ohos.router';
  3. @Entry
  4. @Component
  5. struct MyLogin {
  6.   @State message: string = 'Hello World';
  7.   build() {
  8.    Column(){
  9.      Text("test")
  10.      // auth-component 中的组件Login
  11.      Login({
  12.        modes:[AuthMode.PHONE_VERIFY_CODE] // 手机验证码登录
  13.        ,
  14.        onSuccess:()=>{
  15.          //登录成功后的回调
  16.          router.pushUrl({url:'pages/Index'})
  17.        }
  18.      }){
  19.        Button("登录").height(60).width("100%")
  20.      }
  21.    }.width("100%").height("100%")
  22.   }
  23. }
复制代码



四、自界说登录组件

  1. // 参考链接:https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-auth-harmonyos-arkts-login-phone-0000001631566338
  2. import cloud from '@hw-agconnect/cloud';
  3. import { Auth, VerifyCodeAction } from '@hw-agconnect/cloud';
  4. @Entry
  5. @Component
  6. struct PageTest {
  7.   @State verificationBtnStr:string= "验证码"
  8.   phone:string = ""
  9.   @State verifcationBtnStatus:boolean = true
  10.   @State timer :number = 0
  11.   @State countDown:number = 60
  12.   // 云端获取
  13.   getCloudQrCode(){
  14.     cloud.auth().requestVerifyCode({
  15.       action: VerifyCodeAction.REGISTER_LOGIN,
  16.       lang: 'zh_CN',
  17.       sendInterval: 60,
  18.       verifyCodeType: {
  19.         phoneNumber: this.phone,
  20.         countryCode: '86',
  21.         kind: "phone"
  22.       }
  23.     }).then(verifyCodeResult => {
  24.       //验证码申请成功
  25.       console.log(JSON.stringify(verifyCodeResult))
  26.       AlertDialog.show({
  27.         title: "提示",
  28.         message: "获取验证码成功",
  29.       })
  30.     }).catch((error: Promise<Result>) => {
  31.       AlertDialog.show({
  32.         title: "提示",
  33.         message: "获取验证码失败",
  34.       })
  35.       //验证码申请失败
  36.     });
  37.   }
  38.   // 初始化参数:
  39.   initData(){
  40.     clearInterval(this.timer)
  41.     this.verifcationBtnStatus = true
  42.     this.verificationBtnStr  = "验证码"
  43.     this.countDown  = 60
  44.   }
  45.   // 发送验证码
  46.   getCode(){
  47.     if(this.phone==''){
  48.       AlertDialog.show({
  49.         title: "提示",
  50.         message: "请输入手机号码",
  51.       })
  52.       return;
  53.     }
  54.     this.verifcationBtnStatus = false
  55.     this.getCloudQrCode()
  56.     this.timer  = setInterval(()=>{
  57.       this.verificationBtnStr = `${this.countDown}s`
  58.       if(this.countDown===0){
  59.         this.initData()
  60.         return;
  61.       }
  62.       this.countDown --
  63.     },1000)
  64.   }
  65.   build() {
  66.     Column({space:20}){
  67.       TextInput({placeholder:'请输入手机号:'}).width("100%").height(60).margin({top:20})
  68.         .onChange((value)=>{
  69.           this.phone = value
  70.         })
  71.       Row(){
  72.         TextInput({placeholder:"请输入验证码"}).layoutWeight(1).margin({right:20})
  73.         Button(this.verificationBtnStr).width(120).onClick(()=>{
  74.           this.getCode()
  75.         }).enabled(this.verifcationBtnStatus)
  76.       }.width("100%").height(60)
  77.       Button("登录").width("100%").height(40).padding({
  78.         left:50,right:50
  79.       }).backgroundColor("#ff08be4b")
  80.     }.width("100%").height("100%").padding({left:10,right:10})
  81.   }
  82. }
复制代码

  • 效果:


五、邮箱登录验证

  1. import cloud from '@hw-agconnect/cloud';
  2. import { Auth, VerifyCodeAction } from '@hw-agconnect/cloud';
  3. import router from '@ohos.router';
  4. @Entry
  5. @Component
  6. struct PageTest {
  7.   @State verificationBtnStr:string= "验证码"
  8.   @State phone:string = ""
  9.   @State verifcationBtnStatus:boolean = true
  10.   @State timer :number = 0
  11.   @State countDown:number = 60
  12.   @State data:string = ""
  13.   @State verifCode:string = ""
  14.   // 注销
  15.   loginOut(){
  16.     cloud.auth().signOut().then(() => {
  17.       //登出成功
  18.       AlertDialog.show({
  19.         title: "提示",
  20.         message: "注销用户成功",
  21.       })
  22.     }).catch(() => {
  23.       //登出失败
  24.     });
  25.   }
  26.   //登录
  27.    login(){
  28.    
  29.     // 注册
  30.      this.data = this.verifCode
  31.      cloud.auth().signIn({
  32.        credentialInfo: {
  33.          kind: 'email',
  34.          email: this.phone,
  35.          verifyCode: this.verifCode
  36.        }
  37.      }).then(user => {
  38.        //登录成功
  39.        router.replaceUrl({url:'pages/Index'})
  40.      }).catch((error:Promise<Result>) => {
  41.        //登录失败
  42.        this.data= JSON.stringify(error)
  43.        AlertDialog.show({
  44.          title: "提示",
  45.          message: JSON.stringify(error),
  46.        })
  47.      });
  48.   }
  49.   // 云端获取
  50.   getCloudQrCode(){
  51.     cloud.auth().requestVerifyCode({
  52.       action: VerifyCodeAction.REGISTER_LOGIN,
  53.       lang: 'zh_CN',
  54.       sendInterval: 60,
  55.       verifyCodeType: {
  56.         email: this.phone,
  57.         kind: "email",
  58.       }
  59.     }).then(verifyCodeResult => {
  60.       //验证码申请成功
  61.       console.log(JSON.stringify(verifyCodeResult))
  62.       this.data = JSON.stringify(verifyCodeResult)
  63.       AlertDialog.show({
  64.         title: "提示",
  65.         message: "获取验证码成功",
  66.       })
  67.     }).catch((error: Promise<Result>) => {
  68.       AlertDialog.show({
  69.         title: "提示",
  70.         message: "获取验证码失败",
  71.       })
  72.       //验证码申请失败
  73.     });
  74.   }
  75.   // 初始化参数:
  76.   initData(){
  77.     clearInterval(this.timer)
  78.     this.verifcationBtnStatus = true
  79.     this.verificationBtnStr  = "验证码"
  80.     this.countDown  = 60
  81.   }
  82.   // 发送验证码
  83.   getCode(){
  84.     if(this.phone==''){
  85.       AlertDialog.show({
  86.         title: "提示",
  87.         message: "请输入用户邮箱",
  88.       })
  89.       return;
  90.     }
  91.     this.verifcationBtnStatus = false
  92.     this.getCloudQrCode()
  93.     this.timer  = setInterval(()=>{
  94.       this.verificationBtnStr = `${this.countDown}s`
  95.       if(this.countDown===0){
  96.         this.initData()
  97.         return;
  98.       }
  99.       this.countDown --
  100.     },1000)
  101.   }
  102.   build() {
  103.     Column({space:20}){
  104.       TextInput({placeholder:'请输入手机号:'}).width("100%").height(60).margin({top:20})
  105.         .onChange((value)=>{
  106.           this.phone = value
  107.         })
  108.       Row(){
  109.         TextInput({placeholder:"请输入验证码"}).layoutWeight(1).margin({right:20})
  110.           .onChange((value)=>{
  111.             this.verifCode =value
  112.           })
  113.         Button(this.verificationBtnStr).width(120).onClick(()=>{
  114.           this.getCode()
  115.         }).enabled(this.verifcationBtnStatus)
  116.       }.width("100%").height(60)
  117.       Button("登录").onClick( ()=>{
  118.         this.data = "1aaaaaa"
  119.         this.login()
  120.       }).width("100%").height(40).padding({
  121.         left:50,right:50
  122.       }).backgroundColor("#ff08be4b")
  123.       Button("注销").onClick( ()=>{
  124.         this.data = "1aaaaaa"
  125.         this.loginOut()
  126.       }).width("100%").height(40).padding({
  127.         left:50,right:50
  128.       }).backgroundColor("#ff08be4b")
  129.       Text(this.data).width("100%").height(200).backgroundColor(Color.Pink)
  130.     }.width("100%").height("100%").padding({left:10,right:10})
  131.   }
  132. }
复制代码


  • 获取验证码




  • 登录

  1. // 提示用户已经登录过了,需要登出后才能重新登录
  2. // 重而需要调用注销按钮中的登出方法
  3.    cloud.auth().signOut()
复制代码



  • 点击注销按钮



  • 点击登录后,跳转到Index页面中


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表