BackupCodeController.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Hash;
  5. use PragmaRX\Google2FALaravel\Support\Authenticator;
  6. class BackupCodeController extends Controller
  7. {
  8. public function __construct()
  9. {
  10. $this->middleware('throttle:3,1')->only('login');
  11. }
  12. public function index(Request $request)
  13. {
  14. $authenticator = app(Authenticator::class)->boot($request);
  15. if ($authenticator->isAuthenticated() || ! $request->user()->two_factor_enabled) {
  16. return redirect('/');
  17. }
  18. return view('auth.backup_code');
  19. }
  20. public function login(Request $request)
  21. {
  22. $this->validate($request, [
  23. 'backup_code' => 'required',
  24. ]);
  25. if (! Hash::check($request->backup_code, user()->two_factor_backup_code)) {
  26. return back()->withErrors([
  27. 'backup_code' => __('The backup code was invalid.')
  28. ]);
  29. }
  30. $twoFactor = app('pragmarx.google2fa');
  31. user()->update([
  32. 'two_factor_enabled' => false,
  33. 'two_factor_secret' => $twoFactor->generateSecretKey(),
  34. 'two_factor_backup_code' => null
  35. ]);
  36. if ($request->session()->has('intended_path')) {
  37. return redirect($request->session()->pull('intended_path'));
  38. }
  39. return redirect()->intended($request->redirectPath);
  40. }
  41. }