通过路由上的参数生成唯一md5和路由上token做验证_md5 token-CSDN博客
前言:基于这篇文章我们做网页是否超时,网页是否过期的处理。打开一个网页允许他在一定时间内可以访问,过了这个时间就不可以访问了,encrypt是h5加密方法,看看上面的文档
解释:其实原理也很简单:就是设置一个过期时间,加到了当前时间上,然后再解析的地方获取一下这个过期时间的值,和当前时间做个比较就行了
var tokenExpireSec = Math.floor(Date.now() / 1000) + 20 // 在当前时间上+30s表示30s之后过期
用到的地方:
var currentSeconds = Math.floor(Date.now() / 1000); // 拿到当前时间
if (currentSeconds > tokenExpireSec) {
return "网页鉴权超时"
}
设置过期时间:
var webExpireSec = 300; // 网页有效期(秒)
var expireSec = Math.floor(Date.now() / 1000) + webExpireSec;
var token = encrypt(videoId + timestamp + ui_control + expireSec) + "-" + expireSec;
解析时间是否过期的地方(通过-分割,判断当前时间是否大于设置的过期时间,大于则网页过期)
let token = new URLSearchParams(location.search).get('token')
let tokenArr = token.split("-");
if (tokenArr.length >= 2) {
token = tokenArr[0];
// 判断是否过期
let currentSeconds = Math.floor(Date.now() / 1000);
let tokenExpireSec = parseInt(tokenArr[1]);
if (currentSeconds > tokenExpireSec) {
return "网页鉴权超时"
}
sysToken = md5(videoId + timestamp + ui_control + tokenArr[1]);
}
备注:也可以用时间来单独做md5加密,不用混杂videoId + timestamp + ui_control这些字段也ok的
其他:
npm引用:
import CryptoJS from "crypto-js";
/**
* md5
* @param {string|Buffer} data
* @see https://tool.xuexiareas.com/encryption/md5
* @returns {string} 小写16进制
*/
const md5 = (data: string) => {
return CryptoJS.MD5(data).toString();
}
script引用:crypto-js:https://github.com/brix/crypto-js
添加好友备注【进阶学习】拉你进技术交流群