本章关于图片验证码过期时间验证需要注意的一个问题

...
        // 检查验证码是否过期,重置流程
        if (new Date().getTime() > this.captcha.expiredAt) { <= 这里是获取手机当前的时间进行对比
          wepy.showToast({
            title: '验证码已过期',
            icon: 'none',
            duration: 2000
          })
          this.resetRegister()
          return false
        }
...
        // 记录 key 和 过期时间
          if (codeResponse.statusCode === 201) {
            this.verificationCode = {
              key: codeResponse.data.key,
              expiredAt: Date.parse(codeResponse.data.expired_at) <= 这里保存的是服务器返回的绝对过期时间(2019-01-03 12:12:12)
            }

            // 关闭modal
            this.captchaModalHidden = true
            // 手机输入框 disabled
            this.phoneDisabled = true
            // 清空报错信息
            this.errors = {}
            this.$apply()
          } 
...

注意上面箭头指向的两行代码,考虑下面两种情况:

  1. 有些用户会故意把手机时间往前调整几分钟(可能是为了不要迟到之类的)
  2. 有些人在国外访问项目

他们的验证码永远是过期的

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4
liyu001989

第一个是时间同步的问题,某次调用接口或者每次调用接口的时候都记录一下服务器时间与本地时间的偏差,然后显示或者对比时间的时候做校正。

第二个是时区的问题,因为是基于 Larabbs 写的接口和小程序,larabbs 本身也没有考虑多个时区的情况,可以考虑接口返回秒数,而不是一个确切的时间,或者提交一下当前时区给接口。

因为是基础教程,要不要写到教程里面,我考虑一下

5年前 评论

@liyu001989 现在遇到这个问题,照着教程来写,图片验证码过期,下一步进行不下去

5年前 评论
liyu001989

if (new Date().getTime() > new Date(this.captcha.expiredAt).getTime()) {

@Ooopsean 修改了,这样应该没问题了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!