帮 Line Bot 加上身份验证(1)

昨天我们让 Line Bot 可以成功回应使用者验证码了,但是这样只要任何人加入 Line Bot 都可以获取验证码! 虽然只获取验证码也不一定能做什麽事,但总是以资讯安全观点来说不太好,所以今天开始要帮验证码小帮手加上身份验证的功能!

流程构思

  1. 产生几组不重复的验证码
  2. 手动发送给想让他认证的家人
  3. 家人成为 Line Bot 的好友,Line Bot 打招呼
  4. Line Bot 选单 & 讯息回应提示使用者在 Line 对话框输入身份认证的验证码
  5. GAS 专案收到讯息,进行身份认证并记录
  6. 认证成功,可以正常使用获取验证码的功能了~

那麽今天就来研究要怎麽产生不重复的验证码吧!

UUID (Universally Unique IDentifier)

UUID 具有识别资讯的唯一性,用来作为产生不重复验证码的基底再适合不过了

文件

通用唯一辨识码 - 维基百科,自由的百科全书

通用唯一辨识码(英语:Universally Unique Identifier,缩写:UUID)是用於电脑体系中以辨识资讯的一个128位元识别码。根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性,这与其他大多数编号方案不同。重复UUID码概率接近零,可以忽略不计。

如何用 JavaScript 产生 UUID / GUID? | Summer。桑莫。夏天
p.s Summer 大大的文章惠我良多,推荐各位阅读!

使用简易的 UUID 产生验证码

看完文件後我们可以得知,使用 Math.random() 就可以得到最基本的UUID,只是可能需要过滤重复的数值。因为我们只是要产生不重复的验证码,所以只要用 Math.random() 产出多组8码验证码,再删除重复的值即可。

建立 generateVerificationCode.gs

建立一个 generateVerificationCode.gs 内容如下:

  1. (1 + Math.random()) * 0x10000 产生一个范围在 65536~131072 (不包含 131072) 的浮点数
  2. 将步骤 1 产生出来的数字跟 0 做 | 的位元运算,只保留该数字的整数部分
  3. 转成16进制的文字,并去掉第一个字元 (因为第一个字元一定是1)
  4. 如此一来即可得到一个乱数4码的验证码,重复两次即可得到8码
  5. 使用 js 的 Set 特性过滤掉重复的阵列元素
  6. 得到最多10组的不重复乱数8码验证码
function generateVerificationCode() {
  var amount = 10;
  var verificationCode = [];
  var i = 0;
  var front = "";
  var end = "";
  while ( i < amount) {
    front =  (((1 + Math.random()) * 0x10000)|0).toString(16).substring(1);
    end =  (((1 + Math.random()) * 0x10000)|0).toString(16).substring(1);
    verificationCode.push(front+end);
    i++;
  }

  var uniqueVerificationCode = [...new Set(verificationCode)]

  Logger.log(uniqueVerificationCode)
}

今天就先到这里~明天有台风又要补班让心情不美丽,但希望台风不要造成灾害!
明天会继续完成接下来的流程~


<<:  DAY10 资料室--Vuex模组化

>>:  Day 10 开始你的广告活动吧

【从零开始的Swift开发心路历程-Day24】天气预报App实作Part3

昨天我们已经能把单一地点的天气资讯显示到手机App上面了,接着我们会利用UIButton让我们可以选...

Day 04:大O符号的含意

上一回提到大O符号表达执行时间,但对於大O符号我们可能有些疑问。 既是叫时间,那它的单位是什麽? 我...

Python 演算法 Day 12 - Weak Learning

Chap.II Machine Learning 机器学习 https://yourfreetemp...

【Day 24】JavaScript 事件处理

说明:事件是您在编程时系统内发生的动作或者发生的事情,系统响应事件後,如果需要,您可以某种方式对事件...

Day16 vue.js之我有帐户了!!!

延续昨日 我们今天的目标是获取帐户讯息以及修改帐户资料 首先先去views 里面创一个Account...