如何使用google2fa laravel包调用和接受OTP



我正在使用google2fa laravel包为我的用户在注册和登录时启用OTP验证。该文档描述了如何在注册路径中为用户注册2fa机密,但它没有很好地描述如何在用户登录时启用验证。

我知道有一个2fa中间件路由,可以添加它来将用户推送到google2fa.php配置文件中的特定视图集,但仅此而已

我创建了自己的视图,对应于google2fa.php,如下所示:

'view' => 'auth.otp'

我的身份验证/otop.blade.php

<form class="form-horizontal" method="POST" action="{{ route('verify') }}">
{{ csrf_field() }}
<div class="form-group">
<p>Please enter the one time password generated on your Google Authenticator App. <br> Ensure you submit the current one because it refreshes every 30 seconds.</p>
<label for="one_time_password" class="col-md-4 control-label">One Time Password</label>
<input id="one_time_password" type="number" class="form-control col-md-6" name="one_time_password" required autofocus>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">Verify</button>
</div>
</div>
</form>

你可以看到,我在我的文档中指向了一个名为verify的路由,但这确实没有指向任何地方,文档指向/google2fa/authenticate,但这个路由没有由包定义,也没有在其他任何地方提及,所以什么都不做,导致404。

我创建了一个名为verify的路由,它运行一个运行以下内容的方法:

public function verifySession(Request $request)
{
$google2fa = app('pragmarx.google2fa');
$secret = $request->input('one_time_password');
$valid = $google2fa->verifyKey(auth()->user()->google2fa_secret, $secret);
Log::debug($valid);
}

我得到了关于如何使用源包google2fa验证密钥的信息,虽然我的代码验证了代码,但我不确定下一步该怎么办,如果我回到我最初用2fa中间件点击的路线,它还没有注册我已经验证了自己,并再次将我重定向到OTP页面。

希望能为我提供一些关于如何解决这一问题的指导。

我做了这样的事情,如果$valid,基本上只是重定向到主页(已登录(,如果不是,它将返回原始索引视图以重新输入otp(假设他们在某种程度上输入错误(。希望这能有所帮助!

$valid = $google2fa->verifyKey($request->google2fa_secret, $request->one_time_password);
if ($valid) {
$request->session()->put('login', 1);
return redirect(route('home'));

} else {

return view('google2fa.index', ['show_QR' => false, 'QR_Image' => '', 'secret' => '');
}

最新更新