本文最后更新于 2023-12-16,文章内容可能已经过时,请注意发布时间。


title: Laravel+Google验证器 实现后台二次验证
id: dbdd41b6-f2df-4591-99e8-dfa195e6699d
date: 2023-12-11 00:41:25
auther: liqi
excerpt: 一、为什么要二次验证呢? 一机一码,不会存在账号盗用的问题 动态验证,每30秒生产一个验证码,安全更加保障 验证码有时候无法识别,复杂的验证码容易眼花缭乱,不方便操作 二、安装扩展包 1、首先要在你的Laravel项目中安装Google验证器插件、二维码生成器插件,执行命令如下: # Google验
permalink: /archives/b459596c-5883-4ceb-9847-7645ed310678
categories:

  • fu-wu-duan
    tags:
  • laravel
  • php

、为什么要二次验证呢?

  1. 一机一码,不会存在账号盗用的问题
  2. 动态验证,每30秒生产一个验证码,安全更加保障
  3. 验证码有时候无法识别,复杂的验证码容易眼花缭乱,不方便操作

、安装扩展包

1、首先要在你的Laravel项目中安装Google验证器插件、二维码生成器插件,执行命令如下:

# Google验证器插件安装命令: 

  composer require "earnp/laravel-google-authenticator:dev-master"

  # 二维码生成器:

  composer require simplesoftwareio/simple-qrcode 1.3.*

2、下载安装完成后,需要在config/app.php中注册服务提供者同时注册下相应门面:

'providers' => [
//........
Earnp\GoogleAuthenticator\GoogleAuthenticatorServiceprovider::class,
SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class,
],
'aliases' => [
//..........
'Google' => Earnp\GoogleAuthenticator\Facades\GoogleAuthenticator::class,
'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class
],

三、正式使用

主要分为生成二维码和产生验证码,以接口形式展示如下代码:

//生成二维码
    public function make_qrcode(){
        // 获取google秘钥
        $createSecret = GoogleAuthenticator::CreateSecret();
        //生成二维码
        $google["qrcode"] = \SimpleSoftwareIO\QrCode\Facades\QrCode::encoding('UTF-8')->size(180)->margin(1)->generate($createSecret["codeurl"]);
        //生成的秘钥secret为唯一  存入后台用户的信息
        $data['secret'] = $createSecret['secret'];
        //数据库操作
      //  UsersModel::where('id',$id)->update($data);
        //返回二维码图片 前端展示
        if($google){
            return json(200,'ok',$google);
        }else{
            return json(201,'fail');
        }
    }

生成验证码使用CreateSecret即可,你需要将其内容生成二维码供手机APP扫描

//二次验证
    public function check_code(Request $request){
        //获取输入二次验证码
        $code = $request->get('code');
        //获取后台用户秘钥   可根据用户信息查出
        $google = $request->get('google');
        if(!$code || !$google){
            return  json(201,'fail');
        }
        if(GoogleAuthenticator::CheckCode($google,$code)){
            return json(201,'登陆成功');
        }else{
           return json(201,'请正确输入手机上的动态验证码');
        }
    }

二次验证一般用于绑定,登录认证中,使用CheckCode方法即可,需要传入secrectonecode即验证码即可进行校验,第一个为secrect;返回truefalse

匹配成功,成功登录、匹配失败,友好提示!😄