【最新鸿蒙应用开发】——使用axios完成手机号注册业务

使用Axios请求实现目标效果图:

短信验证码登录

  1. 校验图形验证码,校验通过

  2. 发送短信验证码到用户手机上,可通过在线 WebSocket查看:wss://guardian-api.itheima.net/verifyCode

  3. 根据 手机号 + 短信验证码 实现登录

更新图形验证码

准备一个 @State,用于更新图形验证码

手机号+验证码登录

获取图形验证码

TypeScript 复制代码
  // 校验图形验证码
  async onGraphicCodeSubmit() {
    try {
      // 1. 把手机号,图形验证码发送到后端,校验图形验证码(防机器)
      await postCodeGraphicCheckAPI({
        bizType: BizType.PhoneLogin, // 业务类型,1:手机号短信验证码登录
        phone: this.phoneNumber, // 手机号
        verifyCode: this.graphicCode // 图形验证码
      })
      // 2. 关闭半模态转场
      this.isShowSheet = false
      // 3. 清空输入框
      this.graphicCode = ''
      // 4. 调用发送短信接口
      this.onSendSmsCode()
    } catch (error) {
      // 刷新验证码
      this.timestamp = Date.now()
    }
  }
​
  // 半模态转场
  @Builder
  SheetBuilder() {
    Column() {
      Text('图形验证码')
        .fontSize(16)
        .fontColor($r('app.color.font'))
        .margin({ top: 20, bottom: 50 })
​
      Column({ space: 20 }) {
        Row({ space: 10 }) {
          TextInput({ placeholder: '图形验证码' })
            .fontSize(14)
            .height(42)
            .layoutWeight(1)
            .maxLength(4)
            .onChange((value) => {
              this.graphicCode = value
            })
            .onSubmit(() => {
              // 提交图形验证码
              this.onGraphicCodeSubmit()
            })
          Image(`${BASE_URL}/code/graphic?phone=${this.phoneNumber}&bizType=${BizType.PhoneLogin}&timestamp=${this.timestamp}`)
            .width(108)
            .height(42)
            .objectFit(ImageFit.Contain)
            .onClick(() => {
              this.timestamp = Date.now()
            })
        }
​
        Button("提交")
          .height(42)
          .backgroundColor($r('app.color.brand'))
          .width('100%')
          .enabled(this.graphicCode.length > 0)
          .onClick(() => {
            // 提交图形验证码
            this.onGraphicCodeSubmit()
          })
      }
    }
    .padding({ left: 30, right: 30 })
    .width('100%')
    .height('100%')
  }
​
​
.bindSheet($$this.isShowSheet, this.SheetBuilder(), {
  // 半模态转场,屏幕高度一半,无法修改关闭图标样式
  detents: [SheetSize.MEDIUM],
  backgroundColor: $r('app.color.white')
})

发送短信验证码

1、发送验证码

2、开始倒计时

3、验证码可以通过接口文档的 WebScoket 测试接口获取,模拟手机收到短信。

可通过 在线 WebSocket 工具,模拟查看验证码信息: 服务连接地址 wss://guardian-api.itheima.net/verifyCode

TypeScript 复制代码
// 发送短信验证码

async onSendSmsCode() {

// 发送验证码

await postCodeSmsSendAPI({

bizType: BizType.PhoneLogin,

phone: this.phoneNumber,

})

// 用户提醒

promptAction.showToast({ message: '短信发送到手机上,请注意查收' })

// 界面更新倒计时

this.startCountDown()

}

// 开始倒计时

startCountDown() {

// 初始化倒计时秒数

this.count = 120

// 关闭旧的定时器

clearInterval(this.intervalID)

// 开启定时器

this.intervalID = setInterval(() => {

this.count--

if (this.count <= 0) {

clearInterval(this.intervalID)

}

}, 1000)

}

// 页面销毁,停止倒计时,释放资源

aboutToDisappear() {

clearInterval(this.intervalID)

}

登录提交

1、登录成功持久化存储用户信息

2、axios 拦截器添加 token 信息

TypeScript 复制代码
// 用户信息持久化

@StorageLink(LOGIN_INFO) loginInfo: LoginInfoResponse = {}

// 登录提交

async onLoginSubmit() {

const res = await postUserLoginVerifyCodeAPI({

phone: this.phoneNumber,

verifyCode: this.verifyCode

})

//

promptAction.showToast({ message: '登录成功' })

// 更新持久化存储的信息

this.loginInfo = res.data.result

// 返回上一页

router.back()

}

3、pages/Index.ets 初始化持久化存储

TypeScript 复制代码
// 持久化存储

PersistentStorage.persistProp<PrivacySettings>(PRIVACY_SETTINGS, {})

PersistentStorage.pers
相关推荐
lkbhua莱克瓦24几秒前
Web前端开发核心认知与技术演进
开发语言·前端·笔记·javaweb
FJW0208145 分钟前
Python面向对象三大特征封装,继承,多态
开发语言·python
lbb 小魔仙5 分钟前
【Java】Java 实战项目:从零开发一个在线教育平台,附完整部署教程
java·开发语言
七夜zippoe8 分钟前
Python算法优化实战:时间与空间复杂度的艺术平衡
开发语言·python·算法·贪心算法·动态规划·复杂度
全栈前端老曹8 分钟前
【前端】Hammer.js 快速上手入门教程
开发语言·前端·javascript·vue·react·移动端开发·hammer.js
学编程的小程9 分钟前
告别链接混乱❗️Sun-Panel+cpolar 让 NAS 服务远程一键直达
java·开发语言
夜雨声烦丿9 分钟前
Flutter 框架跨平台鸿蒙开发 - 打造带账单分摊功能的记账本,支持多人AA与智能结算
flutter·华为·harmonyos
青槿吖9 分钟前
【Java集合通关秘籍】从List到Set:解锁无序不重复的集合魔法✨
java·开发语言·算法
冬奇Lab11 分钟前
【Kotlin系列07】类型系统深度解析:从空安全到智能类型推断的设计哲学
android·开发语言·安全·kotlin
weixin_4331793312 分钟前
Python -- 列表 list、字典 dictionary
开发语言·python