阿里云滑块图形验证码2.0 vue对接和问题处理

阿里云滑块图形验证码2.0 vue对接

官方提供了相关对接方法和vue版的对接方案(官网地址),
在这里插入图片描述
按照以上方式很快就能对接完成。

遇到的问题

这个滑块图形验证码,有一个很重要的额问题,就是和后端校验接口的时候会出现captchaKeyId: null的情况,经过分析,找到了原因。

方案一:问题1 如果在同一浏览器tab下,多次操作报错

或者阿里云的token过期之后(10分钟有效),在此唤起图形验证码就会出现如上情况captchaKeyId: null,图形验证校验始终失败,即使刷新也无法解决,需要重新切换浏览器tab重新执行才可以。
导致以上问题的原因是:图形验证码会给我们浏览器注入cookie,为了安全,这个cookie会根据当前浏览器生成deviceToken来保证当前操作是唯一的。这样就出现captchaKeyId为空的情况。

方案二: 就是动态插入script的方法,多次操作问题较多。

可能有人感觉直接在html页面中引入这个https://o.alicdn.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js不优雅,可能采用dom动态插入script标签的做法去实现(新插入script时需要把之前的清除掉然会重复插入很多),这个方法同样会出现上述问题,而且更严重,会导致即使强制刷新浏览器的情况下,校验失败。
(如何动态插入script,以及如何避免多次重复插入,就是每次插入之前,删除已经插入的相关script标签,因为AliyunCaptcha还会依赖插入其他js)

在这里插入图片描述
在这里插入图片描述

解决方案:

官方文档给出了验证码实例的一些方法,这个很有用。
过十分钟内刷新验证码。

captcha.destroyCaptcha(); // 销毁验证码
 pageInit();  // 重新再页面插入AliyunCaptcha,并初始化
 setTimeout(() => {
   captcha.show();  // 显示验证码
 }, 1000);

https://help.aliyun.com/zh/captcha/captcha2-0/user-guide/faq?spm=a2c6h.13066369.question.5.99302735ozMydz#acewk
验证码实例的方法
以上方法,我可自行控制验证码的销毁和显示隐藏等操作。
destroyCaptcha 方法很有用,当出现以上问题之后,我们可以尝试销毁验证码之后,重新刷新页面之后,调用show方法再次显示出验证码。
获取实例方法如下:

 getInstance: (getInstance) => {
   captcha = getInstance;  // 获取验证码实例
   showForm.value = true;
 },

captcha 就是 验证码实例。

通过以上方法就可以可以很好的控制验证码了。

但是实际开发中,我遇到的问题是,验证码和后端校验时,参数都可以很好的传递。但是后端接口返回captchaKeyId经常为空。经过排查可能时接口延时造成的。通过查看文档因该captchaVerifyCallback 在校验回调里面,返回Promise.resove()去返回数据,看到这里说明确实有延迟问题。这里可能只是一个解决方案。
captchaKeyId 为 null的问题任然还是出现,经过我的排查,看到文档说:初始化方法中添加immediate: true。
经过修改配置,增加该配置,问题出现的频率小的多了。
初始化配置

综上所述,问题解决。

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue可以使用阿里云短信验证码进行登录,以下是简单的步骤: 1. 在阿里云控制台申请短信服务,并获取Access Key ID和Access Key Secret。 2. 在Vue项目中安装aliyun-sdk依赖:`npm install aliyun-sdk --save`。 3. 在Vue项目中创建一个`aliyunSms.js`文件,用于发送短信验证码。 ```javascript import SMSClient from '@alicloud/sms-sdk' const accessKeyId = 'yourAccessKeyId' const secretAccessKey = 'yourSecretAccessKey' const phoneNumbers = 'yourPhoneNumber' const signName = 'yourSignName' const templateCode = 'yourTemplateCode' const sendSms = (code) => { const smsClient = new SMSClient({accessKeyId, secretAccessKey}) return smsClient.sendSMS({ PhoneNumbers: phoneNumbers, SignName: signName, TemplateCode: templateCode, TemplateParam: JSON.stringify({code}) }) } export default sendSms ``` 4. 在Vue组件中调用`aliyunSms.js`文件中的`sendSms`方法,并将生成的验证码发送到后端进行验证。 ```javascript import sendSms from '@/utils/aliyunSms' export default { data() { return { phone: '', code: '' } }, methods: { sendCode() { // 调用aliyunSms.js中的方法发送短信验证码 sendSms(this.code).then(res => { console.log(res) }).catch(err => { console.log(err) }) }, login() { // 将手机号和验证码发送到后端进行验证 this.$http.post('/login', { phone: this.phone, code: this.code }).then(res => { console.log(res) }).catch(err => { console.log(err) }) } } } ``` 以上是使用阿里云短信验证码进行登录的简单示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaolongyu3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值