pragmarx/google2fa-laravel verifyKey 始终返回 false

问题描述 投票:0回答:1

PHP v7.4、Laravel v7.28.3 我使用 pragmarx/google2fa-laravel

二维码生成:

$google2fa = app('pragmarx.google2fa');
$google2fa->setAlgorithm(Constants::SHA512);
$secret = $google2fa->generateSecretKey(64);
$user->google2fa_secret = $secret;
$user->save();

$QR_Image = $google2fa->getQRCodeInline(
    config('app.name'),
    $user->email,
    $user->google2fa_secret
);

然后我在前端渲染 QR。二维码看起来很完美,我通过 Google 2fa 应用程序扫描它,代码生成器成功添加到应用程序。

当我尝试验证应用程序中的代码时,它总是返回 false。验证码:

 $code = 'I paste here the code from the application manually';
 $google2fa = app('pragmarx.google2fa');
 var_dump($google2fa->verifyKey($user->google2fa_secret, $code, 10));

但是当我使用 $user->google2fa_secret (我可以在数据库中检查它)手动将代码生成器添加到移动应用程序时,它工作得很好,该生成器中的所有代码都通过了验证。似乎生成的 QR 图像有问题...

2年后更新。我看到很多人都有同样的问题,但不幸的是我不记得我是如何解决的。我可以提供一个有效的实现示例:

二维码生成:

$google2fa              = app('pragmarx.google2fa');
$secret                 = $google2fa->generateSecretKey();
$user->google2fa_secret = $secret;

$qrCode = $google2fa->getQRCodeInline(
    config('app.name'),
    $user->email,
    $user->google2fa_secret
);

验证:

$google2fa->verifyKey($user->google2fa_secret, {{code provided by user from application }}); //returns bool

google2fa.php 配置:

'qrcode_image_backend' => \PragmaRX\Google2FALaravel\Support\Constants::QRCODE_IMAGE_BACKEND_SVG,
php laravel google-2fa
1个回答
0
投票

这就是我的使用方式

pragmarx/google2fa

use Google2FA;
use Illuminate\Support\Facades\Auth;

public function setup()
{
    Google2FA::setQRCodeBackend('svg');
    $secret = Google2FA::generateSecretKey();

    $qr = Google2FA::getQRCodeInline(
        config('app.name'),
        Auth::user()->email,
        $secret
    );

    return view('google2fa.setup', compact('secret', 'qr'));
}

public function verify(Request $request)
{
    $request->validate([
        'otp' => 'required|numeric',
    ]);

    if (!Google2FA::verifyKey(Auth::user()->google2fa_secret, $request->otp)) {
        return back()->withErrors('Invalid One Time Password');
    }

    Google2FA::login();

    return redirect('/home');
}

如果您使用

pragmarx/google2fa-qrcode
,还需要安装
bacon/bacon-qr-code

© www.soinside.com 2019 - 2024. All rights reserved.