利用期约(promise)连锁实现MFA(多因素认证)

利用期约(promise)连锁实现MFA(多因素认证)

MFA

概念:通过两种以上的认证机制之后,才能得到授权

本文以两步验证为例进行说明

期约连锁

期约连锁就是一个期约接一个期约地拼接。之所以可以这样做,是因为每个期约实例的方法(then()、catch()和finally())都会返回一个新的期约对象,而这个新期约又有自己的实例方法。这样连缀方法调用就可以构成所谓的“期约连锁”。

实现MFA

利用期约本身的状态(待定pending、落定settled)及期约连锁可以实现MFA。在首次认证之后连缀调用二次认证,最后连缀调用登录成功的回调。

而在首次认证之后可以通过再返回一个待定期约实例来等待二次认证,因为连锁的期约会因为该实例的待定状态而暂停,直到完成二次认证后该实例转为落定状态。

//JavaScript
const signInDiv = document.getElementById('signInDiv');
const mfaDiv = document.getElementById('mfaDiv');
const loginInfo = document.getElementById('loginInfo');

function firstAuth(callback) {
  Promise.resolve()
    .then(callback)
    .then(res => loginInfo.innerText = res);
}

function secondAuth() {
  return Promise.resolve('Logined!');
}

function singIn() {
  firstAuth(res => new Promise(resolve => {
    addConfirm(resolve);
    mfaDiv.style.display = 'block';
    signInDiv.style.display = 'none';
    loginInfo.innerText = 'Please enter the verification code';
  }));
}

function addConfirm(resolve) {
  document.getElementById('confirm').onclick = () => secondAuth().then(res => resolve(res));
}
<!-- HTML -->
<div id="loginDiv">
  <div id="signInDiv" style="display: block;">
    <div class="title">Sign in</div>
    <input id="username" placeholder="Username">
    <input id="password" placeholder="Password" type="password">
    <button class="singin" onclick="singIn()">
      Sign in
    </button>
  </div>
  <div id="mfaDiv" style="display: none;">
    <div class="title">MFA</div>
    <input id="verificationCode" placeholder="Verification Code">
    <button id="confirm" class="singin">
      Confirm
    </button>
  </div>
  <div id="loginInfo">Please login before browsing</div>
</div>
/* CSS */
#loginDiv {
  overflow: hidden;
  color: #96B97D;
  border-radius: 8px;
  width: 688px;
  height: 288px;
  box-shadow: 0px 0px 6px black;
}

.title {
  position: absolute;
  left: 200px;
  top: 20px;
  font-size: 26px;
  font-weight: 700;
}

#username {
  position: absolute;
  left: 200px;
  top: 70px;
  width: 300px;
  height: 38px;
  padding-left: 10px;
  padding-right: 10px;
  border-radius: 4px;
  border:1px solid #bbb;
  font-size: 14px;
}

#password {
  position: absolute;
  left: 200px;
  top: 120px;
  width: 300px;
  height: 38px;
  padding-left: 10px;
  padding-right: 10px;
  border-radius: 4px;
  border: 1px solid #BBB;
  font-size: 14px;
}

#verificationCode {
  position: absolute;
  left: 200px;
  top: 98px;
  width: 300px;
  height: 38px;
  padding-left: 10px;
  padding-right: 10px;
  border-radius: 4px;
  border: 1px solid #BBB;
  font-size: 14px;
}

.singin {
  position: absolute;
  left: 200px;
  top: 170px;
  width: 300px;
  height: 38px;
  border: none;
  background-color: #96B97D;
  color: white;
  border-radius: 4px;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
}

#loginInfo {
  position: relative;
  top: 230px;
  width: 100%
  height: 35px;
  text-align: center;
  color: #96B97D;
  font-size: 16px;
  font-weight: 700;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多分形波动率(Multifractal Volatility)是一种用于描述金融市场波动性的统计工具。其代码中,主要包括以下几个方面的内容。 首先是数据处理方面,需要将金融市场的价格数据进行处理和整理,以便后续计算分析。这包括读取原始数据、清洗数据(例如去掉无效数据点)、对数据进行转换(例如对数收益率计算)、计算数据的统计性质等等。 接着是多分形计算相关的方法部分。多分形波动率的计算依赖于多分形分析方法,需要编写相应的算法代码。常用的方法包括多重分形分析(MFDFA)和波动性函数法(Variance Function Method),需要先进行数据分段,再计算每个分段的多分形参数(如Hurst指数、Holder指数等),最后将参数进行平均或者组合得到多分形波动率的估计。代码中需要包括这些计算的具体实现,并确保计算结果的准确性和可靠性。 此外,还需要编写可视化部分的代码,用于将多分形波动率的计算结果进行展示。这可以通过绘制图表、绘制多分形谱图等方式来实现,以便更直观地了解金融市场的波动性特征。 总之,多分形波动率的代码设计和实现需要考虑数据处理、多分形计算和可视化三个方面的内容。代码的编写过程中要确保准确性和可靠性,并在实际应用中验证其有效性。很多金融分析软件和工具包已经提供了多分形波动率计算的函数和算法,可以参考和借鉴这些现有的工具,进行相应的调整和优化,以满足具体应用的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值