From 5c83e1775258b45a8d2e482039bb2a016da2c852 Mon Sep 17 00:00:00 2001 From: Bubka <858858+Bubka@users.noreply.github.com> Date: Tue, 21 Feb 2023 09:29:05 +0100 Subject: [PATCH] Let the WebAuthn form log in any user --- app/Http/Controllers/Auth/LoginController.php | 6 +++-- .../Auth/WebAuthnLoginController.php | 21 +++++++-------- resources/js/views/auth/Login.vue | 26 +++++++++++++++---- resources/js/views/settings/WebAuthn.vue | 3 +++ resources/lang/en/errors.php | 2 ++ 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index fb919457..a1f048dc 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -71,8 +71,10 @@ class LoginController extends Controller */ public function logout(Request $request) { + $user = $request->user(); Auth::logout(); - Log::info('User logged out'); + + Log::info(sprintf('User id #%s logged out', $user->id)); return response()->json(['message' => 'signed out'], Response::HTTP_OK); } @@ -151,6 +153,6 @@ class LoginController extends Controller $user->last_seen_at = Carbon::now()->format('Y-m-d H:i:s'); $user->save(); - Log::info('User authenticated'); + Log::info(sprintf('User id #%s authenticated using login & pwd', $user->id)); } } diff --git a/app/Http/Controllers/Auth/WebAuthnLoginController.php b/app/Http/Controllers/Auth/WebAuthnLoginController.php index 826a63ac..6161b565 100644 --- a/app/Http/Controllers/Auth/WebAuthnLoginController.php +++ b/app/Http/Controllers/Auth/WebAuthnLoginController.php @@ -43,16 +43,13 @@ class WebAuthnLoginController extends Controller break; } - // Since 2FAuth is single user designed we fetch the user instance. - // This lets Larapass validate the request without the need to ask - // the visitor for an email address. - $user = User::first(); - - return $user - ? $request->toVerify($user) - : response()->json([ - 'message' => 'no registered user', - ], 400); + return $request->toVerify($request->validate([ + 'email' => [ + 'required', + 'email', + new \App\Rules\CaseInsensitiveEmailExists + ] + ])); } /** @@ -69,7 +66,7 @@ class WebAuthnLoginController extends Controller $response = $request->response; // Some authenticators do not send a userHandle so we hack the response to be compliant - // with Larapass/webauthn-lib implementation that waits for a userHandle + // with Laragear\WebAuthn implementation that waits for a userHandle if (! Arr::exists($response, 'userHandle') || blank($response['userHandle'])) { $response['userHandle'] = User::getFromCredentialId($request->id)?->userHandle(); $request->merge(['response' => $response]); @@ -98,6 +95,6 @@ class WebAuthnLoginController extends Controller $user->last_seen_at = Carbon::now()->format('Y-m-d H:i:s'); $user->save(); - Log::info('User authenticated via webauthn'); + Log::info(sprintf('User id #%s authenticated using webauthn', $user->id)); } } diff --git a/resources/js/views/auth/Login.vue b/resources/js/views/auth/Login.vue index d5a80137..2083702f 100644 --- a/resources/js/views/auth/Login.vue +++ b/resources/js/views/auth/Login.vue @@ -5,9 +5,10 @@