Laravel 使用 Laravel-google-authenticator 擴充通過 Google 身份驗證器為你的網站打造一個動態手機令牌

earnpls發表於2017-11-07

Google 身份驗證器與兩步驗證功能配合,可在您登入 Google 帳戶時為您平添一重安全保障。啟用兩步驗證之後,當您登入帳戶時,需要提供密碼和此應用生成的驗證碼。配置完成後,無需網路連線或蜂窩連線即可獲得驗證碼。參考連結 [ 擴充包: laravel-google-authenticator ] 通過Google身份驗證器為你的網站打造一個動態手機令牌

為什麼使用兩步認證

  1. 相對於驗證碼,安全很多;幾乎是不會存在破解的方法
  2. 驗證碼有時候無法識別,不方便操作
  3. 一機一碼,不會存在賬號盜用的問題
  4. 動態驗證,每30秒生產一個驗證碼,安全更加保障

開發前的準備

  1. 安裝Laravel
  2. 安裝二維碼生成器QrCode,沒有安裝也可以,接下來會安裝

安裝擴充

1、執行如下程式碼安裝擴充包:

composer require "earnp/laravel-google-authenticator:dev-master"
### 安裝二維碼生成器
composer require simplesoftwareio/simple-qrcode 1.3.*

3.等待下載安裝完成,需要在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
],

服務注入以後,如果要使用自定義的配置,還可以釋出配置檔案到config/views目錄:

php artisan vendor:publish

使用

使用方法非常簡單,主要為生成驗證碼和教研驗證碼

1、生產驗證碼

生產驗證碼使用CreateSecret即可,你需要將其內容生成二維碼供手機APP掃描,具體內容在google.blade.php中已經配置成功

// 建立谷歌驗證碼
$createSecret = Google::CreateSecret();
// 您自定義的引數,隨表單返回
$parameter = [["name"=>"usename","value"=>"123"]];
return view('login.google.google', ['createSecret' => $createSecret,"parameter" => $parameter]);

2、校驗驗證碼

校驗驗證碼一般用於繫結,登入認證中,使用CheckCode方法即可,需要傳入secrectonecode即驗證碼即可進行校驗,第一個為secrect;返回truefalse

if(Google::CheckCode($google,$request->onecode)) {
    // 繫結場景:繫結成功,向資料庫插入google引數,跳轉到登入介面讓使用者登入
    // 登入認證場景:認證成功,執行認證操作
    dd("認證成功");
}
else
{
    // 繫結場景:認證失敗,返回重新繫結,重新整理新的二維碼
    return back()->with('msg','請正確輸入手機上google驗證碼 !')->withInput();
    // 登入認證場景:認證失敗,返回重新繫結,重新整理新的二維碼
    return back()->with('msg','驗證碼錯誤,請輸入正確的驗證碼 !')->withInput();
}

這裡有一個具體的實際事例:

use Google;

if ($request->isMethod('post')) {
    if (empty($request->onecode) && strlen($request->onecode) != 6) return back()->with('msg','請正確輸入手機上google驗證碼 !')->withInput();
    // google金鑰,繫結的時候為生成的金鑰;如果是繫結後登入,從資料庫取以前繫結的金鑰
    $google = $request->google;
    // 驗證驗證碼和金鑰是否相同
    if(Google::CheckCode($google,$request->onecode)) {
        // 繫結場景:繫結成功,向資料庫插入google引數,跳轉到登入介面讓使用者登入
        // 登入認證場景:認證成功,執行認證操作
        dd("認證成功");
    }
    else
    {
        // 繫結場景:認證失敗,返回重新繫結,重新整理新的二維碼
        return back()->with('msg','請正確輸入手機上google驗證碼 !')->withInput();
        // 登入認證場景:認證失敗,返回重新繫結,重新整理新的二維碼
        return back()->with('msg','驗證碼錯誤,請輸入正確的驗證碼 !')->withInput();
    }
}
else
{
    // 建立谷歌驗證碼
    $createSecret = Google::CreateSecret();
    // 您自定義的引數,隨表單返回
    $parameter = [["name"=>"usename","value"=>"123"]];
    return view('login.google.google', ['createSecret' => $createSecret,"parameter" => $parameter]);
}

使用中有任何問題可以參考和提問:[ 擴充包: laravel-google-authenticator ] 通過Google身份驗證器為你的網站打造一個動態手機令牌

相關文章