这其实就是「两步验证」或者叫做「双因素验证」的一种实现方式,它这里第二步验证是靠手机短信来发送验证码的。而国外更多的网站/网络服务还会使用一种叫“身份验证器”或叫“虚拟 MFA”的二步验证方式,它是利用一种“随时间变化的验证码”来取代手机短信,不仅更安全,而且可离线使用,通用性也更强 ```php //引用GoogleAuthenticator类 include ('Gangsta/GoogleAuthenticator.php'); $ga = new \PHPGangsta_GoogleAuthenticator(); //这是生成的密钥,每个用户唯一一个,为用户保存起来用于验证 $secret = $ga->createSecret(); //下面为生成二维码,内容是一个URI地址(otpauth://totp/账号?secret=密钥&issuer=标题) $qrCodeUrl = $ga->getQRCodeGoogleUrl(userall("name"), $secret, 'HAS平台二步认证'); ``` ```php //验验证码是否于密钥匹配 $code = $_REQUEST["code"];//用户输入的验证码 $secretu = "";//刚刚生成的唯一密钥 if ($ga->verifyCode($secretu,$code,1)){//验证成功 echo "0"; }else{//验证失败 echo "1"; } ``` 接入逻辑: 用户登录系统之后检查数据是否存在两步验证密钥,如果没有将生成的二维码显示在前台,引导用户使用"谷歌身份验证器" 扫码绑定,用户扫码绑定之后引导用户输入"谷歌身份验证器"显示六位数验证码,进行比对,如果比对成功,密钥保存到数据库中,下次可以在需要二步验证的时候读取密钥 [点击下载GoogleAuthenticator类](https://cnd.haser.top/2021/06/15/3515418572.zip "点击下载GoogleAuthenticator类") Last modification:June 15, 2021 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 请我喝一瓶农夫山泉嘛?