一、首先安装composer包 命令如下
composer require "earnp/laravel-google-authenticator:dev-master"
二、因为要生成二维码,所以需要引入二维码生成包,如果没有引入的可以执行如下命令(如果不需要生成二维码可以不用引入)
composer require simplesoftwareio/simple-qrcode 1.3.*
三、生成验证码
手机下载Google验证器并安装
// 获取google秘钥
$google = GoogleAuthenticator::CreateSecret();
里面包括secret和codeurl
codeurl用于生成二维码,用验证器扫描二维码后会自动添加一个账号名和secret
QrCode::encoding('UTF-8')->size(200)->margin(1)->generate($google["codeurl"]);
当然你也可以选择手动添加,这样就可以不用二维码了,手动添加需要填入账号名和密钥
账号名可以随便填,密钥要固定,后面要用它来验证
四、验证
用生成的密钥对应的验证码验证
if (!GoogleAuthenticator::CheckCode(config('google.secret'),$request->google_auth)){
return '认证失败';
}
我是将secret暂时存在配置文件中,你也可以将它存在数据库中(注意secret和验证码要对应,否则永远认证不成功)
五、问题
我刚开始遇到的问题是用密钥手动生成的验证码能用,二维码也能生成,但生成的二维码扫一直报“无法解读QR码”
后面查看底层代码才发现缺少google配置文件,如果在config文件夹下没有google.php 的配置文件,可以手动添加配置,google.php 的文件内容如下
<?php
return [
// 中文需要UrlEncode转为utf8编码
"authenticatorname" => "Face Mall",
"authenticatorurl" => "",
"secret"=>env('google_secret', 'TEST')
];
如果扫码出现“无法解读QR码”很可能是没取到authenticatorname配置的值