@@ -22,7 +22,7 @@ class TwoFactorAuthenticatedSessionController extends Controller
2222 */
2323 public function create (Request $ request )
2424 {
25- if (! $ request ->session ()->has ('auth.two_factor_user_id ' )) {
25+ if (! $ request ->session ()->has ('login.id ' )) {
2626 return redirect ()->route ('login ' );
2727 }
2828
@@ -42,41 +42,42 @@ public function store(Request $request)
4242 'recovery_code ' => 'nullable|string ' ,
4343 ]);
4444
45- $ user = Auth::loginUsingId ($ request ->session ()->pull ('auth.two_factor_user_id ' ));
45+ $ userId = $ request ->session ()->get ('login.id ' );
46+ $ user = \App \Models \User::find ($ userId );
4647
47- if ($ request ->filled ('code ' )) {
48- $ request ->session ()->put ([
49- 'login.id ' => $ user ->getKey (),
50- 'login.remember ' => $ request ->session ()->pull ('auth.two_factor_remember ' ),
51- ]);
52-
53- $ result = app (ConfirmTwoFactorAuthentication::class)(
54- $ request ->user (),
55- $ request ->code
56- );
48+ if (! $ user ) {
49+ return redirect ()->route ('login ' );
50+ }
5751
58- if ($ result ) {
59- $ request ->session ()->forget ('login ' );
60- return redirect ()->intended (route ('dashboard ' ));
52+ // Handle TOTP code
53+ if ($ request ->filled ('code ' )) {
54+ $ secret = decrypt ($ user ->two_factor_secret );
55+ $ valid = app (\App \Actions \TwoFactorAuth \VerifyTwoFactorCode::class)($ secret , $ request ->code );
56+ if ($ valid ) {
57+ Auth::login ($ user , $ request ->session ()->get ('login.remember ' , false ));
58+ $ request ->session ()->regenerate ();
59+ $ request ->session ()->forget (['login.id ' , 'login.remember ' ]);
60+ return redirect ()->intended (route ('dashboard ' , absolute: false ));
6161 }
62-
6362 return back ()->withErrors (['code ' => __ ('The provided two factor authentication code was invalid. ' )]);
6463 }
6564
65+ // Handle recovery code
6666 if ($ request ->filled ('recovery_code ' )) {
67- $ recovery = collect ($ user ->recoveryCodes ())->first (function ($ code ) use ($ request ) {
68- return hash_equals ($ code , $ request ->recovery_code );
67+ $ recoveryCodes = $ user ->recoveryCodes ();
68+ $ provided = $ request ->recovery_code ;
69+ $ match = collect ($ recoveryCodes )->first (function ($ code ) use ($ provided ) {
70+ return hash_equals ($ code , $ provided );
6971 });
70-
71- if (! $ recovery ) {
72+ if (! $ match ) {
7273 return back ()->withErrors (['recovery_code ' => __ ('The provided two factor authentication recovery code was invalid. ' )]);
7374 }
74-
75- $ user ->replaceRecoveryCode ($ recovery );
76-
77- $ request ->session ()->forget ( ' login ' );
78-
79- return redirect ()->intended (route ('dashboard ' ));
75+ // Remove used recovery code
76+ $ user ->replaceRecoveryCode ($ match );
77+ Auth:: login ( $ user , $ request -> session ()-> get ( ' login.remember ' , false ));
78+ $ request ->session ()->regenerate ( );
79+ $ request -> session ()-> forget ([ ' login.id ' , ' login.remember ' ]);
80+ return redirect ()->intended (route ('dashboard ' , absolute: false ));
8081 }
8182
8283 return back ()->withErrors (['code ' => __ ('Please provide a valid two factor authentication code. ' )]);
0 commit comments