user(); $google2fa_url = ''; if ($user->passwordSecurity()->exists()) { $google2fa_url = \Google2FA::getQRCodeInline( config('app.name'), $user->email, $user->passwordSecurity->google2fa_secret ); } $data = [ 'user' => $user, 'google2fa_url' => $google2fa_url, ]; return view('auth.2fa')->with('data', $data); } /** * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException * @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException */ public function generate2faSecret(Request $request): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|\Illuminate\Contracts\Foundation\Application { $user = $request->user(); // Add the secret key to the registration data PasswordSecurity::create( [ 'user_id' => $user->id, 'google2fa_enable' => 0, 'google2fa_secret' => \Google2FA::generateSecretKey(), ] ); return redirect()->to('2fa')->with('success', 'Secret Key is generated, Please verify Code to Enable 2FA'); } /** * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException * @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException */ public function enable2fa(Request $request): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|\Illuminate\Contracts\Foundation\Application { $user = $request->user(); $secret = $request->input('verify-code'); $valid = \Google2FA::verifyKey($user->passwordSecurity->google2fa_secret, $secret); if ($valid) { $user->passwordSecurity->google2fa_enable = 1; $user->passwordSecurity->save(); return redirect()->to('2fa')->with('success', '2FA is Enabled Successfully.'); } return redirect()->to('2fa')->with('error', 'Invalid Verification Code, Please try again.'); } public function disable2fa(Disable2faPasswordSecurityRequest $request): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|\Illuminate\Contracts\Foundation\Application { if (! (Hash::check($request->get('current-password'), $request->user()->password))) { // The passwords matches return redirect()->back()->with('error', 'Your password does not match with your account password. Please try again.'); } $validatedData = $request->validated(); $user = $request->user(); $user->passwordSecurity->google2fa_enable = 0; $user->passwordSecurity->save(); return redirect()->to('2fa')->with('success', '2FA is now Disabled.'); } }