Maison > cadre php > Laravel > Comment implémenter google-authenticator - validateur de code QR Google dans Laravel

Comment implémenter google-authenticator - validateur de code QR Google dans Laravel

little bottle
Libérer: 2019-04-22 10:54:22
avant
7070 Les gens l'ont consulté

Cet article parle principalement de l'utilisation de Laravel pour implémenter le validateur de code QR de Google. Il a une certaine valeur de référence. J'espère que les amis intéressés pourront en apprendre davantage.

Préparation avant développement

  1. Installer Laravel
  2. Installer le générateur de code QRQrCode, vous pouvez le faire sans installation, il sera installé ensuite

Installer l'extension

1. Exécutez le code suivant pour installer le package d'extension :

1 composer require "earnp/laravel-google-authenticator:dev-master"
2 ### 安装二维码生成器
3 ### 若composer require不到文件自行github 下载源码放入vendor相应的目录下
4 composer require simplesoftwareio/simple-qrcode 1.3.*
Copier après la connexion

2. Attendez la fin du téléchargement et de l'installation. enregistrez le fournisseur de services dans config/app.php en même temps. Téléchargez la façade correspondante :

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

'aliases' => [
     //..........
    'Google' => Earnp\GoogleAuthenticator\Facades\GoogleAuthenticator::class,
    'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class
],
Copier après la connexion

3. Après l'injection de service, si vous souhaitez utiliser une configuration personnalisée, vous pouvez également publier le fichier de configuration dans le fichier de configuration. Répertoire config/views :

1 ###这一步可以不执行:视情况而定
2 php artisan vendor:publish
Copier après la connexion

Utilisez-en un (utilisé dans le projet)

La méthode d'utilisation est très simple, principalement pour générer du code de vérification et vérifier le code de vérification

1. Code de vérification de la production

À l'aide du code de vérification de la productionCreateSecretc'est-à-dire Oui, vous devez générer un code QR pour que le contenu soit analysé par l'application mobile. Le contenu spécifique a été configuré avec succès dans <🎜. >google.blade.php


public function addUser(Request $request)
{
    if($request->isMethod(&#39;get&#39;)){
         // 创建谷歌验证码
         $createSecret = GoogleAuthenticator::CreateSecret();
         //$createSecret = [
         //   "secret" => "NJURUPQN6XNYGSF2"
         //   "codeurl" => "otpauth://totp/?secret=NJURUPQN6XNYGSF2"
         //]
         // 生成二维码
         $createSecret["qrcode"] = QrCode::encoding(&#39;UTF-8&#39;)->size(180)->margin(1)->generate($createSecret["codeurl"]);
         //发送页面
         return view(&#39;auth.auth.add&#39;,[&#39;google&#39;=>$createSecret]);
    }
    //获取数据
    $user_from = $request->only([&#39;role_id&#39;,&#39;username&#39;,&#39;pass&#39;,&#39;pass_confirmation&#39;,&#39;real_name&#39;,&#39;mobile&#39;,&#39;secret&#39;]);
   
    //保存入库 secret会存入数据库
    $auth_user = new AuthUserService();
    $res = $auth_user->addUser($user_from);
    return redirect(&#39;admin/auth/index&#39;);
}
Copier après la connexion
2. Vérifiez le code de vérification

//登录验证
public function login(array $param)
{
    $model = new AuthUserModel();
    //Google 验证
    if(!GoogleAuthenticator::CheckCode($userInfo[&#39;secret&#39;],$param[&#39;secret&#39;])){
        return [&#39;status&#39;=>false,&#39;msg&#39;=>[&#39;secret&#39;=>[&#39;验证码错误,请重新输入&#39;]]];
    }

    $update = $model->editLoginInfo($userInfo[&#39;id&#39;], $update);
    if(!$update){
        return [&#39;status&#39;=>false,&#39;msg&#39;=>[&#39;username&#39;=>&#39;更新登录信息失败&#39;]];
    }else{
        return [&#39;status&#39;=>true,&#39;data&#39;=>$userInfo];
    }
}
Copier après la connexion

Utilisez deux (Démo)

1. Vérifiez le code de vérification

Vérifiez que les codes de vérification sont généralement utilisés pour l'authentification de connexion, utilisez la méthode

Vous devez transmettre CheckCode et <. 🎜>, qui sont des codes de vérification, pour vérification. Le premier est secrect ; retourner onecode Ou secrecttruefalse


Voici une pratique spécifique. exemple :
if(Google::CheckCode($google,$request->onecode)) {
    // 绑定场景:绑定成功,向数据库插入google参数,跳转到登录界面让用户登录
    // 登录认证场景:认证成功,执行认证操作
    dd("认证成功");
}else {
    // 绑定场景:认证失败,返回重新绑定,刷新新的二维码
    return back()->with(&#39;msg&#39;,&#39;请正确输入手机上google验证码 !&#39;)->withInput();
    // 登录认证场景:认证失败,返回重新绑定,刷新新的二维码
    return back()->with(&#39;msg&#39;,&#39;验证码错误,请输入正确的验证码 !&#39;)->withInput();
}
Copier après la connexion

Tutoriels associés :
use Google;

if ($request->isMethod(&#39;post&#39;)) {
    if (empty($request->onecode) && strlen($request->onecode) != 6) return back()->with(&#39;msg&#39;,&#39;请正确输入手机上google验证码 !&#39;)->withInput();
    // google密钥,绑定的时候为生成的密钥;如果是绑定后登录,从数据库取以前绑定的密钥
    $google = $request->google;
    // 验证验证码和密钥是否相同
    if(Google::CheckCode($google,$request->onecode)) {
        // 绑定场景:绑定成功,向数据库插入google参数,跳转到登录界面让用户登录
        // 登录认证场景:认证成功,执行认证操作
        dd("认证成功");
    }else {
        // 绑定场景:认证失败,返回重新绑定,刷新新的二维码
        return back()->with(&#39;msg&#39;,&#39;请正确输入手机上google验证码 !&#39;)->withInput();
        // 登录认证场景:认证失败,返回重新绑定,刷新新的二维码
        return back()->with(&#39;msg&#39;,&#39;验证码错误,请输入正确的验证码 !&#39;)->withInput();
    }
}else {
    // 创建谷歌验证码
    $createSecret = Google::CreateSecret();
    // 您自定义的参数,随表单返回
    $parameter = [["name"=>"usename","value"=>"123"]];
    return view(&#39;login.google.google&#39;, [&#39;createSecret&#39; => $createSecret,"parameter" => $parameter]);
}
Copier après la connexion
tutoriel vidéo Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal