首页 > 其他分享 >harmonyOS Next 实现验证码功能遇到的坑

harmonyOS Next 实现验证码功能遇到的坑

时间:2024-07-24 10:59:09浏览次数:16  
标签:vcode canvas harmonyOS showCode 验证码 height width Next

前言

第一次写博记录学习harmonyOS开发的过程,文案功底差请见谅!

场景

刚开始学习harmonyOS开发,近期有一个翻译网报APP的需求,在登录的时候需要验证码过滤验证码机器人试错。

参考

https://blog.csdn.net/zcczero/article/details/137057040  

感谢 zcczero 大神的帖子 可以直接拿来使用,不过要注意一点就是:

 图形绘制这里需要自己手动加一个类,如下图所示:

 

那么问题来了,我需要在用户登录不管成功还是失败都重置新的验证码怎么办?

 由于对arkts的熟练度不够,刚开始老想着能不能像HTML那样去获取验证码这个组件的element。经过多番搜索失败告终,

然后像了一个并不人性化的处理,因为@link装饰器需要传引用  那么我在提交的时候修改验证码内的值,至少避免了验证机器人

的试错漏洞,但是这样一旦登录失败,验证码就跟图片显示的验证码不一致,始终不人性化。

 

 

 

解决

 临近下班,有个同事让我看一个@watch的装饰器,我当时简单看了一下,感觉这个方案可行。

 试着直接在引用类中加入@watch装饰器。

 

 报错:堆栈溢出,然后详细了解了一下@watch装饰器的特性

 

 只支持string类型

于是乎就单独加了一个string类型字段,这个字段我只需要单向从父级同步到子级就行 所以使用@prop装饰器

 

@ watch 装饰器特点是检测这个字段的文本修改,然后触发文本修改事件:

 

最后贴一个验证码组件的完整代码

@Component
export default struct ImageCode {
  //指定canvas要绘制的图形的宽(可使用@Prop装饰器装饰,由调用此组件的父组件传递)
  @State canvas_width: number = 110;
  //指定canvas要绘制的图形的高
  @State canvas_height: number = 40;
  //用于接收图形验证码的文本值
  @Link showCode: VerCode
  @Prop @Watch("valueChange") text : string
  //用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿,true表明开启抗锯齿。
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  //用来创建CanvasRenderingContext2D对象,通过在canvas中调用CanvasRenderingContext2D对象来绘制。
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

  build() {
    Row() {
      //在canvas中调用CanvasRenderingContext2D对象。
      Canvas(this.context)
        .width(this.canvas_width)
        .height(this.canvas_height)
        .backgroundColor('#B8DACC')
        .onReady(() => {
          //在这里绘制图形
          // let region=new Path2D();
          // region.arc(50,10,1,0,5);
          this.showCode.vcode = CommonUtil.drawImgCode(this.context, this.canvas_width, this.canvas_height)
          console.log(this.showCode.vcode)
        })
        .onClick(() => {
          this.showCode.vcode = CommonUtil.drawImgCode(this.context, this.canvas_width, this.canvas_height)
          console.log(this.showCode.vcode)
        })
    }
    .width('100%')
    .height('100%')
  }

  valueChange(text: string) {
    this.showCode.vcode = CommonUtil.drawImgCode(this.context, this.canvas_width, this.canvas_height)
    console.log(this.showCode.vcode)
  }
}

调用的地方,随意修改文本内容即可。

 

 到此问题解决,看一下最终的效果。

 

 

标签:vcode,canvas,harmonyOS,showCode,验证码,height,width,Next
From: https://www.cnblogs.com/yuki-/p/18320285

相关文章

  • 遇到有验证码的登陆框的爆破思路
    ***使用工具burpsuit、xp_CAPTCHA3.2(这两个工具网上一找一堆,我就不分享了,但是要注意捕获验证码的工具xp_CAPTCHA3.2最好基于python3.6以上版本运行)***模拟环境海洋网站(登陆界面)点击以下链接下载,利用phpstudy配置靶场海洋CMS-开源免费PHP影视系统,影视CMS,视频CMS,电影CMS,......
  • 记一次Vue.nextTick失效的解决经历
    问题背景在一个老页面上渲染echarts,在vue的mounted里面使用this.$nextTick,无法获取到ref。也就是获取不到dom。解决思路一开始怀疑vue的版本不对,但是后来vue升级到vue2.6.14,还是不行。控制台也没有任何报错,页面能正常渲染。这个时候我开始想,是不是使用的vuejs文件是生产版......
  • KMP算法中next数组以及nextval的求解(简单,通俗易懂版)
    以一个题为例:计算上图中next[j]以及nextval[j]的值。【本文中j的下标从1开始。】最长公共前后缀:···前缀:不包含最后一个字符的所有以第一个字符开头的连续子串。···后缀:不包含第一个字符的所有以最后一个字符结尾的连续子串。先看next[j],(1)j的下标......
  • 鸿蒙HarmonyOS开发:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化
    文章目录一、装饰器二、概述三、限制条件四、装饰器说明五、Toggle组件1、子组件2、接口3、ToggleType枚举4、事件六、示例演示1、代码2、效果一、装饰器@State装饰器:组件内状态@Prop装饰器:父子单向同步@Link装饰器:父子双向同步@Provide装饰器和@Consume装饰器:与......
  • 从零开始NEXT.js(五)——路由组和平行路由
    从零开始NEXT.s(四)——服务器组件上一章我们介绍了服务器组件的内部逻辑,这一章我们重点来讲一下NEXT,js中的页面路由。路由组在我们的app文件夹下,我们可以添加一个又一个文件夹去建立我们的页面路由,当页面过多时找起来就会很复杂,用路由组的形式可以很便捷的收纳我们的路由......
  • 登陆京东(滑块验证),验证码识别,Scrapy框架介绍及其使用,持久化存储到本地
    Ⅰ案例登陆京东(滑块验证)【一】下载opencv库pipinstallopencv-python【二】数据准备先将京东的滑块图片下载到本地背景图background.png滑块图tag.png【三】展示获取滑块的移动数据importos.path#使用opencv识别图像计算滑块之间的距离importcv2impo......
  • SkiaSharp画的验证码在Linux下无法正常显示
    SkiaSharp是Google的Skia图形库的.NET封装版,可用于跨移动、服务器和桌面平台绘制2D图形。SkiaSharp可与OpenGL一起用于硬件加速渲染。SkiaSharp最初由Mono开发,但现在由Microsoft维护,并根据MITLicense提供。使用SkiaSharp生成验证码图片示例代码usingSkiaSharp......
  • ABP vNext—审计日志使用
    ABPvNext—审计日志关于审计日志开启审计日志如何自定义审计日志关于审计日志审计跟踪(也称为审核日志)是一个安全相关的时间顺序记录,记录这些记录的目的是为已经影响在任何时候的详细操作,提供程序运行的证明文件记录、源或事件。ABP提供了能够为应用程序交互自动记......
  • Spring Boot实现分布式验证码登录方案
     ​ 博客主页:   南来_北往......
  • Kaptcha - Java图片验证码
    1.什么是Kaptcha验证码?Kaptcha是一个强大的开源Java验证码生成库,由Google开发。它能够生成高度可配置的图片验证码,主要用于防止自动化程序滥用web应用,提高应用的安全性。2.Kaptcha的主要特性Kaptcha具有以下几个主要特性:高度可配置:可以自定义字体、颜色、大小......